Spark之自定义排序

本文介绍了在Spark中如何根据需求实现灵活的排序规则,详细讲解了四种实现方式:通过自定义类实现Comparable接口,利用case class的Ordered特质,通过隐式转换以及直接使用元组的排序特性。在数据处理过程中,涉及姓名、年龄和颜值字段的排序,先按颜值降序,颜值相等则按年龄升序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

使用rdd的sortBy或sortByKey方法进行排序,实现根据需求实现灵活的排序规则,在给定的数据中,有三个字段,分别是:

姓名,年龄,颜值。先按照颜值的从高到低进行排序,如果颜值相等,再按照年龄的升序排序

数据

"laozhao,18,999.9", "laoduan,40,99.99", "hangge,28,99.99"

实现方式

方式一:

  1. 将数据封装到自定义的普通的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方法
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值