web-dev-qa-db-ja.com

Spark 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)]

タイは最初の値またはランダムを返すことができます。

7
captainKirk104

実際には、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ドキュメント:

15
Daniel de Paula