我有一个 RDD[(String, (Long, Long))]
其中每个元素都不是唯一的:
(com.instagram.android,(2,0))
(com.android.contacts,(6,1))
(com.android.contacts,(3,4))
(com.instagram.android,(8,3))
...
所以我想获得一个 RDD
,其中每个元素都是每个唯一键的两个值的总和:
(com.instagram.android,(10,3))
(com.android.contacts,(9,5))
...
这是我的代码:
val appNamesAndPropertiesRdd = appNodesRdd.map({
case Row(_, appName, totalUsageTime, usageFrequency, _, _, _, _) =>
(appName, (totalUsageTime, usageFrequency))
})
最佳答案
使用reduceByKey
:
val rdd = appNamesAndPropertiesRdd.reduceByKey(
(acc, elem) => (acc._1 + elem._1, acc._2 + elem._2)
)
reduceByKey
使用了 SCouto 描述的 aggregateByKey
,但具有更易读的用法。对于您的情况,aggregateByKey
的更高级功能 - 被 reduceBykey
的简单 API 隐藏 - 不是必需的
关于scala - Apache Spark RDD 中每个唯一键的总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48441483/