Scala如何将集合中的元素放入数组函数中
Posted
技术标签:
【中文标题】Scala如何将集合中的元素放入数组函数中【英文标题】:Scala how to put elements in collection into array function 【发布时间】:2017-08-07 13:40:56 【问题描述】:所以我有一个数据框和一个列名列表,我需要将它们放入数组函数中,这样我就可以使用 .withColumn 函数将名称传递给 UDF。
像这样:val names = "col1,col2,col3"
而我需要的是 array("col1","col2","col3")
。我试图将名称变成 Seq 并像这样执行 for 循环:
array(for(i <- 0 to names.length-1)names(i))
但问题是这个 for 循环不返回任何值。但是如果我做一个 for yield 循环,那么它会将我想要的所有元素放入一个集合中,但我需要单独提取它们。
关于如何解决这个问题的任何想法?
为了让问题更清楚......数组是一个函数,而不是一个集合。数组就是集合。
例子:
scala> array("col1","col2","col3")
res20: org.apache.spark.sql.Column = array(col1, col2, col3)
我需要什么:我有序列val names = Seq("col1","col2","col3")
,我需要将 Seq 中的元素放入数组函数中。
【问题讨论】:
names.split(",")
@philantrovert 给我一个收藏,我不需要收藏
你的array
和scala Array
不一样?如果不是数组,你想要什么?
你能提供输入和预期输出吗?
@philantrovert for scala 2.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: _*)
【讨论】:
救了我的命!非常感谢!以上是关于Scala如何将集合中的元素放入数组函数中的主要内容,如果未能解决你的问题,请参考以下文章
如何在scala中获取分层数组的最终元素并在其上应用聚合函数?