Wenn ich ein Datensatz wie folgt aus:Pair RDD Transformations
val list = List ((1,1), (1,2), (1,3), (2,2), (2,1), (3,1), (3,3))
Und ich möchte per-Taste, um den Durchschnitt zu finden, damit der Ausgang sein sollte:
(1, 2), (2, 3/2), (3, 2)
kann ich dies tun mit groupByKey, countByKey, and reduceByKey
irgendwie oder muss ich combineByKey-Methode ähnlich dem unten gezeigten Beispiel verwenden: Ich versuchte mit groupByKey, countByKey, and reduceByKey
, aber diese Kombination von Methoden nicht funktionieren, fragte ich mich, ob jemand einen Weg kennt, es mit diesen drei Methoden zu tun?
val result = input.combineByKey(
(v) => (v, 1),
(acc: (Int, Int), v) => (acc._1 + v, acc._2 + 1),
(acc1: (Int, Int), acc2: (Int, Int)) => (acc1._1 + acc2._1, acc1._2 + acc2._2)).
map{ case (key, value) => (key, value._1/value._2.toFloat) }
result.collectAsMap().map(println(_))
Oh Recht habe ich vergessen, wenn Sie groupByKey es die Werte in einem Array setzt, so dass Sie Summe und Größe verwenden können auf diesem Array! Danke für die Hilfe! – CapturedTree