2017-05-28 100 views
0

我有类似这样的输入。Spark/Scala:结构类型为Spark的DataFrame列

输入:

|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 | 
+----------+-----------+---------+ 

我想要的输出是类型enter image description here

使用数据帧和UDF我能够做到这一点 enter image description here 但我想有这些列名的以及结构数据类型。任何帮助表示赞赏。

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 

回答

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))) 
    } 
+0

该解决方案您可以检查您的这个解决方案与您的问题所需要的模式相匹配?我怀疑 –

+0

是的。它确实匹配。 :) –

+0

确实如此。 ;) 谢谢 。我想你一定得到了你的解决方案。为您的解决方案upvote –

相关问题