需求
使用rdd的sortBy或sortByKey方法进行排序,实现根据需求实现灵活的排序规则,在给定的数据中,有三个字段,分别是:
姓名,年龄,颜值。先按照颜值的从高到低进行排序,如果颜值相等,再按照年龄的升序排序
数据
"laozhao,18,999.9", "laoduan,40,99.99", "hangge,28,99.99"
实现方式
方式一:
- 将数据封装到自定义的普通的class中,实现comparable接口,
并且要实现序列化接口,因为shuffle数据先写磁盘,然后在网络传递都要实现序列化
//自定义排序 实现实现Comparable和序列化接口
class Boy1(val name :String, val age:Int, val fv :Double) extends Comparable [Boy1]with Serializable {
override def compareTo(o: Boy1): Int = {
if(this.fv==o.fv){ //先比较颜值,颜值相同的话,再比较年龄 颜值降序,年龄升序
this.age - o.age
}else{
java.lang.Double.compare(o.fv,this.fv)
}
}
override def toString = s"Boy1($name, $age, $fv)" //获得toString方法
}