dataframe—数组列中所有元素的总和

ckx4rj1h  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(445)

我是spark的新手,有一个用例可以找到一列中所有值的总和。每列都是一个整数数组。

df.show(2,false)

+------------------+
|value             |
+------------------+
|[3,4,5]           |
+------------------+
|[1,2]             |
+------------------+

要查找的值3+4+5+1+2=15
有人能帮我/指导我如何做到这一点吗?
编辑:我必须在spark 2.3中运行此代码

s3fp2yjn

s3fp2yjn1#

一种选择是总结 array 然后计算总的和。这可以通过spark sql函数完成 aggregate 可从spark 2.4.0版获得。

val tmp = df.withColumn("summed_val",expr("aggregate(val,0,(acc, x) -> acc + x)"))

tmp.show()
+---+---------+----------+
| id|      val|summed_val|
+---+---------+----------+
|  1|[3, 4, 5]|        12|
|  2|   [1, 2]|         3|
+---+---------+----------+

//one row dataframe with the overall sum. collecting to a scalar value is possible too.
tmp.agg(sum("summed_val").alias("total")).show() 
+-----+
|total|
+-----+
|   15|
+-----+

另一种选择是使用 explode . 但请注意,这种方法将生成大量要在其上聚合的数据。

import org.apache.spark.sql.functions.explode
val tmp = df.withColumn("elem",explode($"val"))
tmp.agg(sum($"elem").alias("total")).show()

相关问题