Apache spark 如何在带有Scala/Spark的udf中使用变量参数*?
我有一个数据框,其中列数是可变的。每个列类型都是Int,我想得到所有列的和。想到使用:*,这是我的代码: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
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
哪个
创建新的数组列。输入列必须全部具有相同的数据类型