【发布时间】:2021-05-09 23:15:30
【问题描述】:
我将 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 提供给 struct ?也对其他可能采用不同方法在现有填充数据框中添加嵌套列的解决方案开放。
谢谢!
【问题讨论】:
标签: scala dataframe apache-spark apache-spark-sql apache-spark-dataset