版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bokzmm/article/details/79842936
一、目标对象添加隐式转换函数的方式实现自定义排序
object MySort{
//为student类添加隐式转换函数
implicit val stuOrdering = new Ordering[student]{
override def compare(x: student, y: student) = {
//自定义排序格式为:默认按年龄升序排序,当年龄相同时,按分数降序排序
if(x.age != y.age){
x.age - y.age
}else{
y.score - x.score
}
}
}
}
/**
* 隐式转换函数实现自定义排序
*/
object CustomSort1{
def main(args: Array[String]): Unit = {
//1.创建配置对象
val conf = new SparkConf().setAppName("sort1").setMaster("local[2]");
//2.创建集群入口类对象
val sc = new SparkContext(conf);
//3.并行化的方式生成rdd
val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))
//4.对数据进行排序
//引入隐式转换函数
import MySort.stuOrdering
val resRdd = rdd.sortBy(x => student(x._1,x._2.toInt,x._3.toInt))
//5.打印排序后的结果数据
println(resRdd.collect().toBuffer)
}
}
//学生类
case class student(name:String,age:Int,score:Int)
二、目标对象实现Ordered特质的方式实现自定义排序
object CustomSort2{
def main(args: Array[String]): Unit = {
//1.创建配置对象
val conf = new SparkConf().setAppName("sort2").setMaster("local[2]");
//2.创建集群入口类对象
val sc = new SparkContext(conf);
//3.并行化的方式生成rdd
val rdd = sc.parallelize(Array(("tom",24,92),("ko",24,97),("mark",28,88),("jack",18,86)))
//4.对数据进行排序
val resRdd = rdd.sortBy(x => student2(x._1,x._2.toInt,x._3.toInt))
//5.打印排序后的结果数据
println(resRdd.collect().toBuffer)
}
}
case class student2(name:String,age:Int,score:Int) extends Ordered[student2]{
override def compare(that: student2): Int = {
if(this.age != that.age){
this.age - that.age
}else{
that.score - this.score
}
}
}