我有这样的输入。
输入:
|customerId|Header |Line |
|1001 |1001aa |1001aa1 |
|1001 |1001aa |1001aa2 |
|1001 |1001aa |1001aa3 |
|1001 |1001aa |1001aa4 |
|1002 |1002bb |1002bb1 |
|1002 |1002bb |1002bb2 |
|1002 |1002bb |1002bb3 |
|1002 |1002bb |1002bb4 |
|1003 |1003cc |1003cc1 |
|1003 |1003cc |1003cc2 |
|1003 |1003cc |1003cc3 |
+----------+-----------+---------+
使用Dataframe和UDF我能够做到这一点 但我想在struct Datatype中也有这些列名。任何帮助表示赞赏。
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
答案 0 :(得分: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))) }