Spark JavaPairRDD按值排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyoc97/article/details/79965037

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);  //倒序
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页