2017-09-07 15 views
-1

を作成します。私は、idでグループ化した後にinfo_1をキーにして、info_2info_3を値にしたいと思います。したがって、o/pは次のようになります。スパークScalaは同様に、私はスキーマを持っているキーと値のペア

id,[[info[0]_1:{info[0]_2,info[0]_3}],[info[1]_1:{{info[1]_2,info[1]_3},...] 

親切に助けてください。

+2

これはどのコードを試しましたか?あなたが得ているエラーと一緒に親切にそれを共有してください。 –

+0

いいえ、私は試してみませんか? – gayathri

+0

いくつかのサンプル入力を共有できますか?ラファエルに感謝します。 – BDR

答えて

0

これは、あなたが始める必要があります(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を使用して最初に配列を連結(および平坦化)する必要があります。

+0

それは働いた – gayathri

+0

@ gayathri大丈夫あなたは答えを受け入れることができますか? –

+0

私はRaphaelを受け入れました。スター – gayathri

関連する問題