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

Python 获取Spark RDD中每个关键点的最大值,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,返回spark 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)] 领带可以返

返回spark 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)]

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

实际上您有一个PairRDD。最好的方法之一是使用reduceByKey:

(斯卡拉)

val group=rdd.reduceByKey(数学最大值(,))
(Python)

grouped=rdd.reduceByKey(最大值)
(爪哇7)

javapairdd group=newjavapairdd(rdd).reduceByKey(
新功能2(){
公共整数调用(整数v1、整数v2){
返回数学最大值(v1,v2);
}
});
(爪哇8)

javapairdd group=newjavapairdd(rdd).reduceByKey(
(v1,v2)->数学最大值(v1,v2)
);
reduceByKey的API文件:


您能给出一种在Java中实现这一点的方法吗?我正在使用java并寻找完全相同的thing@tsar2512对于Java8,这可能会起作用:
newjavapairdd(rdd).reduceByKey((v1,v2)->Math.max(v1,v2))感谢您的回复,不幸的是,我使用的是Java 7-它不允许lambda函数。通常必须编写匿名函数。您能告诉我Java 7的解决方案是什么吗?我怀疑一个简单的比较器函数应该可以工作!另外。我们得到的是属于每个键的最大值。是否正确?@tsar2512,是的,结果RDD将为每个键包含一个条目,其中包含一对(key,maxValue)。我用Java7和Java8的版本更新了答案,但是我还没有测试它们,所以请让我知道它是否有效。
JavaPairRDD<String, Integer> grouped = new JavaPairRDD(rdd).reduceByKey(
    (v1, v2) -> Math.max(v1, v2)
);