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があります。これを行うための最良の方法の1つは、reduceByKeyを使用することです。
(Scala)
val grouped = rdd.reduceByKey(math.max(_, _))
(Python)
grouped = rdd.reduceByKey(max)
(Java 7)
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 8)
JavaPairRDD<String, Integer> grouped = new JavaPairRDD(rdd).reduceByKey(
(v1, v2) -> Math.max(v1, v2)
);
ReduceByKeyのAPIドキュメント: