を作成します。私は、id
でグループ化した後にinfo_1
をキーにして、info_2
とinfo_3
を値にしたいと思います。したがって、o/pは次のようになります。スパークScalaは同様に、私はスキーマを持っているキーと値のペア
id,[[info[0]_1:{info[0]_2,info[0]_3}],[info[1]_1:{{info[1]_2,info[1]_3},...]
親切に助けてください。
を作成します。私は、id
でグループ化した後にinfo_1
をキーにして、info_2
とinfo_3
を値にしたいと思います。したがって、o/pは次のようになります。スパークScalaは同様に、私はスキーマを持っているキーと値のペア
id,[[info[0]_1:{info[0]_2,info[0]_3}],[info[1]_1:{{info[1]_2,info[1]_3},...]
親切に助けてください。
これは、あなたが始める必要があります(UDF-アプローチは):
val df = Seq(
("1", Seq(("a", 1L, "b"), ("c", 2L, "d"))
)
).toDF("id", "info")
df.show()
+---+------------------+
| id| info|
+---+------------------+
| 1|[[a,1,b], [c,2,d]]|
+---+------------------+
val transformStructToMap = udf((structarray : Seq[Row]) => {
structarray.map(r =>
(r.getString(0), // key
(r.getLong(1),r.getString(2))) // values
).toMap
})
df.select(
$"id",
transformStructToMap($"info").as("info")
).show()
+---+---------------------------+
|id |info |
+---+---------------------------+
|1 |Map(a -> [1,b], c -> [2,d])|
+---+---------------------------+
私は本当にあなたが「グループ化した後に」何を意味するか理解していません。 IDでグループ化した後に配列を連結する場合は、udfを使用して最初に配列を連結(および平坦化)する必要があります。
これはどのコードを試しましたか?あなたが得ているエラーと一緒に親切にそれを共有してください。 –
いいえ、私は試してみませんか? – gayathri
いくつかのサンプル入力を共有できますか?ラファエルに感謝します。 – BDR