Python 获取Spark RDD中每个关键点的最大值
返回spark RDD中与每个唯一键关联的最大行(值)的最佳方法是什么 我正在使用python,我尝试了Math max,通过键和聚合进行映射和缩减。有没有一种有效的方法可以做到这一点?可能是UDF 我有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)] 领带可以返
[(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文件:
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)
);