获取Spark RDD中每个键的最大值

时间:2016-05-04 00:17:04

标签: python apache-spark pyspark rdd

返回与火花RDD中每个唯一键关联的最大行(值)的最佳方法是什么?

我正在使用python,我已经尝试过Math max,映射和缩减键和聚合。有没有一种有效的方法来做到这一点?可能是UDF?

我有RDD格式:

[(v, 3),
 (v, 1),
 (v, 1),
 (w, 7),
 (w, 1),
 (x, 3),
 (y, 1),
 (y, 1),
 (y, 2),
 (y, 3)]

我需要回复:

[(v, 3),
 (w, 7),
 (x, 3),
 (y, 3)]

领带可以返回第一个值或随机。

1 个答案:

答案 0 :(得分:15)

实际上你有一个PairRDD。其中一个最好的方法是使用reduceByKey:

(斯卡拉)

grouped = rdd.reduceByKey(max)

(Python)的

JavaPairRDD<String, Integer> grouped = new JavaPairRDD(rdd).reduceByKey(
    new Function2<Integer, Integer, Integer>() {
        public Integer call(Integer v1, Integer v2) {
            return Math.max(v1, v2);
    }
});

(Java 7)

JavaPairRDD<String, Integer> grouped = new JavaPairRDD(rdd).reduceByKey(
    (v1, v2) -> Math.max(v1, v2)
);

(Java 8)

kubectl config view

reduceByKey的API文档: