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); //倒序