2016-08-04 60 views
-1

我有以下數據類型的火花數據幀合併的元組:火花數據幀:當一個元件相匹配

名稱:串,陣列>

下面是示例數據:

cust1 [[0,elem1], [0,elem2], [0, elem3], [1, grp1], [1, grp2], [1, grp3], [1, grp4], [2, val10], [2, val20]]

我想連接所有元素(同時保持順序),它們具有相同的元組的第一個元素。例如(0,elem1)和(0,elem2)應該合併,因爲元組的第一個元素是0(相同)。

這裏是希望的O/P:

cust1 [(0, [elem1, elem2, elem3]), (1,[grp1, grp2, grp3, grp4]), (2,[val10, val20])]

使用數據幀操作它我該怎麼辦?

我試過如下:

val reshape = udf((xs: Seq[Row]) => Row.fromSeq(Seq((_.getString(0), xs.groupBy(_.getString(0)).values.map(_.map(_.getString(1)).toArray).toArray))) 

不過,我得到這個錯誤:

error: missing parameter type for expanded function ((x$1) => x$1.getString(0))

回答

1

嘗試:

val reshape = udf((xs: Seq[Row]) => xs.groupBy(_.getString(0)).values.map(_.map(_.getString(1)).toArray).toArray) 

df.select(resahpe(df.col("column")) 
+0

我已經添加了另一列到數據幀,可以請你更新你的答案。 – user3803714

+0

我能夠添加額外的列,以便不成問題。不過,我想在更新的o/p中顯示的o/p中包含groupby密鑰。任何關於如何做到這一點的想法都會很棒。 – user3803714

+0

我試過這樣做:val reshape = udf((xs:Seq [Row])=> Row.fromSeq(Seq((_。getString(0),xs.groupBy(_。getString(0))。values.map (_。getString(1))。toArray).toArray))) 但它給了我這個錯誤:錯誤:缺少擴展函數的參數類型((x $ 1)=> x $ 1.getString(0) ) – user3803714