apache-spark - 对 rdd int 数组执行求和

标签 apache-spark

是否有任何内置转换可以对以下 rdd 的 Int 求和

org.apache.spark.rdd.RDD[(String, (Int, Int))]

string 是键,Int 数组是 Value,我需要的是将所有 Int 的总和作为 RDD[(String, Int)] .我试过 groupByKey 没有成功......

此外 - 结果集必须再次是 rdd。

提前致谢

最佳答案

如果目标是对值的元素 (Int, Int) 求和,那么 map 转换可以实现:

val arr = Array(("A", (1, 1)), ("B", (2, 2)), ("C", (3, 3))

val rdd = sc.parallelize(arr)

val result = rdd.map{ case (a, (b, c)) => (a, b + c) }

// result.collect = Array((A,2), (B,4), (C,6))

相反,如果值类型是数组,则可以使用 Array.sum。
val rdd = sc.parallelize(Array(("A", Array(1, 1)), 
                               ("B", Array(2, 2)), 
                               ("C", Array(3, 3)))

rdd.map { case (a, b) => (a, b.sum) }

编辑:
map正如@Justin 建议的那样,转换不会保留原始分区器 mapValues这里可能更合适:
rdd.mapValues{ case (x, y) => x + y }
rdd.mapValues(_.sum) 

关于apache-spark - 对 rdd int 数组执行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504762/

相关文章:

hadoop - 如何从 CDH 5.4.4 上的 Spark 查询 Hive

apache-spark - 将源配置单元表的多列数据复制到不同行的目标配置单元表的单列

python - Pyspark RDD以不同的方式聚合不同的值字段

apache-spark - 如何在 spark 2.1.0 中提交 python 文件?

apache-spark - 无法理解错误 "SparkListenerBus has already stopped! Dropping event ..."

windows - winutils spark windows 安装 env_variable

docker - Google Kubernetes集群上的待处理Spark Pod:CPU不足

apache-spark - 在 PySpark 中重命名重复的列名称或对其执行选择操作

apache-spark - 根据pyspark中列中的过滤条件和窗口期计算平均值

apache-spark - javax.servlet.ServletException : java. util.NoSuchElementException : None. 得到