所以我有一个数据帧,以及我需要放入数组函数的列名列表,所以我可以使用.withColumn函数将名称传递给UDF。
像这样:val names = "col1,col2,col3"
我需要的是array("col1","col2","col3")
。我试图将名字变成Seq并像这样做一个for循环:
array(for(i <- 0 to names.length-1)names(i))
但问题是这个循环没有返回任何值。但是,如果我为yield循环执行,那么它将我想要的所有元素放入集合中,但我需要单独提取它们。
关于如何解决这个问题的任何想法?
使问题更清楚....数组是一个函数,而不是一个集合。数组是集合。
示例:
scala> array("col1","col2","col3")
res20: org.apache.spark.sql.Column = array(col1, col2, col3)
我需要什么:我有序列val names = Seq("col1","col2","col3")
,我需要将Seq中的元素放入数组函数中。
答案 0 :(得分:1)
这应该做:
import org.apache.spark.sql.function.{col, array}
val names = "col1,col2,col3"
val cols = names.split(",").map(col(_))
val arrayCols = array(cols: _*)