问题描述
我将 spark 数据帧的列移动到同一数据帧内的嵌套列的方法是这样的:
.appName("SparkByExamples.com")
.master("local")
.getorCreate()
import spark.sqlContext.implicits._
val data = Seq(("Adam","111","50000"),("Abe","222","60000"),("Sam","333","40000"))
var df = data.toDF("Name","EmpId__c","Salary__c")
df.show(false)
val cstColsSeq = df.columns.filter(c => c.endsWith("__c")).map(f => { col(f) }).toSeq
var cstMapCol: Column = org.apache.spark.sql.functions.struct(cstColsSeq)
df = df.withColumn("cstMap",cstMapCol)
问题是我无法向 org.apache.spark.sql.functions.struct(...) 调用提供 Seq[Column]。它只接受一个 Column* 参数。
后续是做这样的事情:
for (i <- cstColsList) {
cstMapCol = org.apache.spark.sql.functions.struct(i)
df = df.withColumn("cstMap",cstMapCol)
}
然而,这会覆盖 cstMap
有什么想法我如何向结构提供 cstColsSeq 吗?也欢迎其他解决方案,这些解决方案可能采用不同的方法在现有填充数据框中添加嵌套列。
谢谢!
解决方法
您可以使用 pwsh -c " ""ab c"".length "
表示法扩展 Seq
:
: _*
这将给出输出
var cstMapCol: Column = org.apache.spark.sql.functions.struct(cstColsSeq: _*)