Spark中自定义排序

来源:互联网 发布:拱拱淘宝工具箱下载 编辑:程序博客网 时间:2024/05/29 19:55
import org.apache.spark.{SparkConf, SparkContext}object OrderContext { //object GirlOrdering extends Ordering[Girl]{}  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    }  }}/**  * Created by root on 2016/5/18.  *///sort =>规则 先按faveValue,比较年龄//name,faveValue,ageobject CustomSort {  def main(args: Array[String]) {    val conf = new SparkConf().setAppName("CustomSort").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 agecase 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    }  }}  *//**  * 第二种,通过隐式转换完成排序  * @param faceValue  * @param age  */case class Girl(faceValue: Int, age: Int) extends Serializable