spark 自定义排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25908611/article/details/80573448
spark 自定义排序

一、为什么要自定义排序?

在spark中,利用rdd的sortBy函数进行排序,我们只能单一对某个元素,然而这并不能解决工作中的实际业务,所以今天整理一个简单自定义的排序的类来解决这个问题。


二、定义要素

1、定义一个类,继承Ordered

2、实现Serializable序列化

3、重写compare方法


三、上代码

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

object CustomSort extends App {
  val conf = new SparkConf().setAppName("CustomSort").setMaster("local")
  val sc = new SparkContext(conf)
  val rdd = sc.parallelize(List(("tom",90,21,1),("jack",88,23,2),("jay",92,25,3),("peate",82,22,4)))
  //原有的sortBy进行单元素操作
  val sortBy = rdd.sortBy(_._3,false)
  //自定义
  val mySortRdd = rdd.sortBy(x => MySort(x._2,x._3),false)
  println(sortBy.collect().toList)
  println(mySortRdd.collect().toList)
}
//对faceValue和age进行分别比较,先按age,再按faceValue进行排序
case class MySort(val faceValue:Int,val age:Int) extends Ordered[MySort] with Serializable{
  override def compare(that: MySort): Int = {
    if(this.faceValue == that.faceValue){
      that.age - that.age
    }else{
      this.faceValue - that.faceValue
    }
  }
}

执行结果如下:


猜你喜欢

转载自blog.csdn.net/qq_25908611/article/details/80573448