Spark/Scala:Struct类型的Spark数据框列

Spark/Scala:Struct类型的Spark数据框列,scala,apache-spark-sql,spark-dataframe,Scala,Apache Spark Sql,Spark Dataframe,我有这样的输入 输入: 我希望输出类型为 使用Dataframe和UDF,我能够做到这一点 但我希望这些列名与struct数据类型一起使用。感谢您的帮助 val udfHeaderLineList1 = udf((header:String,line:Seq[String])=>{ line.map(records=>List(header,records)).toList }) val eventingDFtable = my_dataframe_data_Table.

我有这样的输入

输入:

我希望输出类型为

使用Dataframe和UDF,我能够做到这一点 但我希望这些列名与struct数据类型一起使用。感谢您的帮助

 val udfHeaderLineList1 = udf((header:String,line:Seq[String])=>{
  line.map(records=>List(header,records)).toList
})


val eventingDFtable = my_dataframe_data_Table.
  groupBy(col("customerId"), col("header")).
  agg(collect_list(col("Line")).alias("Line")).
 withColumn("TransHeaderStruct",udfHeaderLineList1(col("header"),col("Line"))).printSchema

我通过创建case类得到了这个解决方案

case class simpleCaseClass (header:String,line:String) val udfHeaderLineList3 = udf((header:String,line:Seq[String])=>{ line.map(records=>List(header ,records)).map(value=>simpleCaseClass(value(0),value(1))) }
您能否检查此解决方案是否与问题中所需的模式匹配?我怀疑是的。它不匹配是的,的确如此;谢谢我想你一定找到了解决办法。对你的解决方案投赞成票 case class simpleCaseClass (header:String,line:String) val udfHeaderLineList3 = udf((header:String,line:Seq[String])=>{ line.map(records=>List(header ,records)).map(value=>simpleCaseClass(value(0),value(1))) }