如何在Apache Spark中对JavaPairRDD进行排序

3
我正在从一个日志文件中获取IP地址并对其进行计数,现在我想根据其计数值对JavaPairRDD进行排序。 你可以参考以下代码。
JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {

        @Override
        public Integer call(Integer v1, Integer v2) throws Exception {
            // TODO Auto-generated method stub
            return v1 + v2;
        }
    });

上述的JavaPairRDD将返回IP计数,现在我想对其进行排序...例如输出将会是这样:

(172.16.0.0,125)
(192.168.0.0,12)
(127.168.0.44,92)

第二个值是该特定IP的计数。

1个回答

4

Spark不支持基于值进行排序。解决方法是交换键和值对,然后基于键进行排序。

请查看:https://issues.apache.org/jira/browse/SPARK-3655

使用以下代码进行键和值的交换:

JavaPairRDD<Integer, String> swapped = counts.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() {
           @Override
           public Tuple2<Integer, String> call(Tuple2<String, Integer> item) throws Exception {
               return item.swap();
           }

        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接