Dataframe 数组列中所有元素的总和

Dataframe 数组列中所有元素的总和,dataframe,apache-spark,apache-spark-sql,Dataframe,Apache Spark,Apache Spark Sql,我是spark新手,有一个用例可以找到一列中所有值的总和。每列都是一个整数数组 df.show(2,false) +------------------+ |value | +------------------+ |[3,4,5] | +------------------+ |[1,2] | +------------------+ 用于查找3+4+5+1+2=15的值 有人能帮我/指导我如何做到这一点吗 编辑:我必须

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

df.show(2,false)

+------------------+
|value             |
+------------------+
|[3,4,5]           |
+------------------+
|[1,2]             |
+------------------+ 
用于查找3+4+5+1+2=15的值

有人能帮我/指导我如何做到这一点吗


编辑:我必须在spark 2.3中运行此代码,一个选项是对每行的
数组
求和,然后计算总和。这可以通过Spark 2.4.0版提供的Spark SQL函数实现

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|
+-----+
另一个选择是使用。但请注意,这种方法将生成大量数据,以便在其上进行聚合

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

一个选项是对每行的
数组
求和,然后计算总和。这可以通过Spark 2.4.0版提供的Spark SQL函数实现

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|
+-----+
另一个选择是使用。但请注意,这种方法将生成大量数据,以便在其上进行聚合

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