2016-08-04 8 views
-1

に一致したときにタプルをマージする私は、次のデータ型を持つスパークデータフレームを持っている:スパークデータフレーム:要素は

名:文字列、配列>

ここでは、サンプルデータです:

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

私が欲しいですタプルの最初の要素と同じ要素を持つすべての要素を(順序を維持しながら)連結します。タプルの最初の要素は0(同じ)なので、たとえば(0、elem1)と(0、elem2)はマージする必要があります。ここで

を所望の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エラー:拡張関数のパラメータタイプがありません((x $ 1)=> x $ 1.getString(0))。 ) – user3803714

関連する問題