Dataframe 数组列中所有元素的总和
我是spark新手,有一个用例可以找到一列中所有值的总和。每列都是一个整数数组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的值 有人能帮我/指导我如何做到这一点吗 编辑:我必须
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()