scala - Apache Spark RDD 中每个唯一键的总和值

标签 scala apache-spark

我有一个 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/

相关文章:

scala - 星火笔记本 : How can I filter rows based on a column value where each column cell is an array of strings?

java - Scala 解析器和组合器 : java. lang.RuntimeException:字符串匹配正则表达式 `\z' 预期

scala - 单个 arg 匿名函数的简明符号(避免下划线)未按预期工作

scala - 如何将 Scala 匿名特征实现转换为 Rust?

scala - 如何使用 AKKA 动态创建远程角色并控制它们

java - 通过 apache spark 将行收集为列表

machine-learning - 用最少的上下文对原始文本进行情感分析和有效聚类

apache-spark - Spark 数据帧同一列上的多个聚合操作

apache-spark - PHOENIX SPARK - 用于 BulkLoad 的 DataFrame

apache-spark - 如何理解Spark MLlib的libsvm的格式类型?