Apache spark 如何在带有Scala/Spark的udf中使用变量参数*?

Apache spark 如何在带有Scala/Spark的udf中使用变量参数*?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个数据框,其中列数是可变的。每个列类型都是Int,我想得到所有列的和。想到使用:*,这是我的代码: val arr=数组(1,4,3,2,5,7,3,5,4,18) val输入=新数组缓冲[(Int,Int)]() 对于(iSpark UDF不支持可变长度参数, 这是解决你问题的办法 import spark.implicits._ val input = Array(1,4,3,2,5,7,3,5,4,18).zipWithIndex var df=spark.sparkContex

我有一个数据框,其中列数是可变的。每个列类型都是Int,我想得到所有列的和。想到使用:*,这是我的代码:

val arr=数组(1,4,3,2,5,7,3,5,4,18)
val输入=新数组缓冲[(Int,Int)]()

对于(iSpark UDF不支持可变长度参数, 这是解决你问题的办法

import spark.implicits._

val input = Array(1,4,3,2,5,7,3,5,4,18).zipWithIndex

var df=spark.sparkContext.parallelize(input,3).toDF("value2","value1")

df.withColumn("total", df.columns.map(col(_)).reduce(_ + _))
输出:

+------+------+-----+
|value2|value1|total|
+------+------+-----+
|     1|     0|    1|
|     4|     1|    5|
|     3|     2|    5|
|     2|     3|    5|
|     5|     4|    9|
|     7|     5|   12|
|     3|     6|    9|
|     5|     7|   12|
|     4|     8|   12|
|    18|     9|   27|
+------+------+-----+

希望这有帮助

Spark UDF不支持可变长度参数, 这是解决你问题的办法

import spark.implicits._

val input = Array(1,4,3,2,5,7,3,5,4,18).zipWithIndex

var df=spark.sparkContext.parallelize(input,3).toDF("value2","value1")

df.withColumn("total", df.columns.map(col(_)).reduce(_ + _))
输出:

+------+------+-----+
|value2|value1|total|
+------+------+-----+
|     1|     0|    1|
|     4|     1|    5|
|     3|     2|    5|
|     2|     3|    5|
|     5|     4|    9|
|     7|     5|   12|
|     3|     6|    9|
|     5|     7|   12|
|     4|     8|   12|
|    18|     9|   27|
+------+------+-----+
希望这有帮助

您可以试试

你可以试试


这可能是你所期望的

val func = udf((s: Seq[Int]) => s.sum)
df.withColumn("sum", func(array(cols: _*))).show()
其中
array
org.apache.spark.sql.functions.array
哪个

创建新的数组列。输入列必须全部具有相同的数据类型


这可能是你所期望的

val func = udf((s: Seq[Int]) => s.sum)
df.withColumn("sum", func(array(cols: _*))).show()
其中
array
org.apache.spark.sql.functions.array
哪个

创建新的数组列。输入列必须全部具有相同的数据类型