Spark JavaPairRDD按值排序

本文介绍了一种使用Spark处理日志文件中方法调用计数的技巧,通过反转元组的键值对并利用sortByKey方法实现按调用次数降序排序。

Spark Tuple2元组根据Value排序

今天遇到一个需求获取日志里每个方法调用的调用次数。在看了JavaPairRDD排序方法,都是按key进行操作的。sortByKey()5个方法,包括自定义Comparator的,都是按照Key来排序,有点伤感。

  def sortByKey(comp: Comparator[K]): JavaPairRDD[K, V] = sortByKey(comp, true)

RDD这么多操作会漏掉这个么?而且就算按单词的出现次数排序这种需求应该还是很多的。既然能按key排序,那何不把value看成key。于是将元组的key value交换一下顺序,然后在调用sortByKey()。果然很好用。

 JavaRDD<String> logRdd = sparkSession.sparkContext().textFile("root.2018-04-09.log", 1).toJavaRDD();
 JavaPairRDD<Integer,String> counts = logRdd.mapToPair(row->new Tuple2<>(row.split(" ")[0],1))   //假设第一个是方法
                                .reduceByKey((i1,i2)->i1+i2)    
                                .mapToPair((row)->  new Tuple2<>(row._2,row._1))    //交换位置
                                .sortByKey(false);  //倒序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值