spark中自定义多维度排序

在spark中,原始的sortByKey是以map为操作对象,按照key进行排序,value跟随

如果我们要设置多维排序,就需要自定义这个key对象

下面以三维度为例:

该class需要 extends Ordered[T] with Serializable , 然后将这个类的对象作为sortByKey的第一个key参数,进行sort

 

val conf = new SparkConf()
conf.setAppName("thirdSort")
conf.setMaster("local")
val sc = new SparkContext(conf)

val lines = sc.textFile("d:/third.txt")

val a = lines.map(line => (new ThirdOrderKey(line.split(" ")(0).toInt,line.split(" ")(1).toInt,line.split(" ")(2).toInt),line))     // 将每行的key分别装入到ThirdOrderKey对象

a.sortByKey(false).map(x=>x._2).collect.foreach (println)                           //  sortByKey的结果会自动添加一行key,结果是value

  

下面是ThirdOrderKey的定义,2个关键点,一个是extends Ordered,另外一个是实现compare方法

class  ThirdOrderKey(val first:Int,val second:Int,val thrid:Int) extends Ordered[ThirdOrderKey] with Serializable {

  def compare(other:ThirdOrderKey):Int ={

    if(this.first-other.first!=0) {
      this.first-other.first
    }
    else if(this.second - other.second !=0)
    {
      this.second-other.second
    }
    else
    {
      this.thrid - other.thrid
    }
  }
}

  

转载于:https://www.cnblogs.com/jackie2016/p/5667025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值