假設我有RDD(String,List[Int]),即("David",List(60,70,80)),("John",List(70,80,90))。如何在 Scala 中使用 reduceByKey 來計算List[Int]. 最后,我想要另一個 RDD,就像("David",70),("John",80)
uj5u.com熱心網友回復:
基于的東西reduceByKey并不直接好看,因為它的型別簽名:
def reduceByKey(func: (V, V) => V): RDD[(K, V)]
V在您的情況下List[Int],您將獲得RDD[(String, List[Int])].
一種解決方法是使用List一個元素,即實際平均值:
val rddAvg: RDD[(String, Int)] =
rdd1
.reduceByKey { case (key, numbers) => List(numbers.sum / numbers.length) }
.mapValues(_.head)
您也可以嘗試基于以下內容aggregateByKey:此函式可以回傳不同的結果型別,并且可以一步完成。
后來編輯:我放棄了例如使用groupByKey,因為它是明智的性能劣于reduceByKey或aggregateByKey一個用例就像一個平均計算
uj5u.com熱心網友回復:
val data1 = List(("David", List(60, 70, 80)), ("John", List(70, 80, 90)))
val rdd1 = sc.parallelize(data1)
print(rdd1.mapValues(value => value.sum.toDouble / value.size).collect)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375527.html
上一篇:如何使用pyspark將多個行值與groupby相加?
下一篇:如何使用linq獲取表中值的計數
