我将sparkDataframe的列移动到同一Dataframe中的嵌套列的方法如下:
.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]。它只接受列*param。
接下来要做的就是这样:
for (i <- cstColsList) {
cstMapCol = org.apache.spark.sql.functions.struct(i)
df = df.withColumn("cstMap", cstMapCol)
}
但是,这会覆盖 cstMap
我该如何向结构提供cstcolsseq?其他解决方案也可以采用不同的方法在现有填充的数据框中添加嵌套列。
谢谢!
1条答案
按热度按时间zazmityj1#
您可以扩展
Seq
使用: _*
符号:这样就可以输出