【问题标题】:How can I use reduceByKey from spark to sum integers in a list?如何使用 spark 中的 reduceByKey 对列表中的整数求和?
【发布时间】:2019-11-12 00:46:37
【问题描述】:

我有一个(键,值),其值等于列表中的整数列表。我的意思是:

(Key, Value) = ("aaa", [ [1,2,3],[1,1,1] ])

我希望 reducebykey 将相同位置的每个值相加如下:

("aaa", [1+1,2+1,3+1])

使用reduceBykey 函数的最佳方法是什么?

谢谢你!

【问题讨论】:

标签: apache-spark


【解决方案1】:

虽然我不确定您为什么需要在这里使用 reduceByKey,但根据我的理解提供我的解决方案。

import sparkSession.implicits._
def col2sum(x:Array[Int],y:Array[Int]):Array[Int] = {
     x.zipAll(y,0,0).map(pair=>pair._1+pair._2)
}
val kvData = sparkSession.sparkContext.parallelize(Seq(("aaa", Array(Array(1, 2, 3), Array(1, 1, 1)))))
val output = kvData.map(data => (data._1, data._2.reduce(col2sum)))

转成DataFrame查看结果:

output.toDF("field_1", "field_2").show()
+----+---------+
|ddff|    dffhj|
+----+---------+
| aaa|[2, 3, 4]|
+----+---------+

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 2019-03-05
    • 2016-02-25
    • 1970-01-01
    • 2018-08-24
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多