如果我有一個數據集與此類似:對RDD轉換
val list = List ((1,1), (1,2), (1,3), (2,2), (2,1), (3,1), (3,3))
而且我想找到每個鍵的平均所以輸出應該是:
(1, 2), (2, 3/2), (3, 2)
我能做到這一點使用groupByKey, countByKey, and reduceByKey
莫名其妙或我必須使用類似於下面的示例combineByKey方法:我嘗試使用groupByKey, countByKey, and reduceByKey
但這種方法的組合不起作用,我想知道是否有人知道使用這三種方法做到這一點?
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(_))
哦,對了,我忘當你groupByKey它把值在數組中,所以你可以使用之和大小在該陣列上!感謝您的幫助! – CapturedTree