spark自定义排序

package cn.smart.spark

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by Mr.Smart on 2018-05-24.
  */

object OrderContext {
  implicit val girlOrdering  = new Ordering[Girl] {
    override def compare(x: Girl, y: Girl): Int = {
      if(x.faceValue > y.faceValue) 1
      else if (x.faceValue == y.faceValue) {
        if(x.age > y.age) -1 else 1
      } else -1
    }
  }
}


object CustomerSort {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("CustomerSort").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("yuihatano", 90, 28, 1), ("angelababy", 90, 27, 2),("JuJingYi", 95, 22, 3)))
    import OrderContext._
    val rdd2 = rdd1.sortBy(x => Girl(x._2,x._3),false)
    println(rdd2.collect().toBuffer)
    sc.stop()
  }
}

/**
  *
  * 第一种方式
  * @param faceValue
  * @param age
  */
/*case class Girl(val faceValue: Int, val age: Int) extends Ordered[Girl] with Serializable {
  override def compare(that: Girl): Int = {
    if(this.faceValue == that.faceValue) {
      that.age - this.age
    } else {
      this.faceValue -that.faceValue
    }
  }
}*/


case class Girl(val faceValue: Int, val age: Int) extends Serializable

你可能感兴趣的:(bigdata)