我有一個 spark 資料框,其中一列有多個字典:
| ID | 結果 |
|---|---|
| 1 | {'key1':'a', 'key2':'b'}, {'key1':'d', 'key2':'e'}, {'key1':'m', 'key2':' n'} |
| 2 | {'key1':'r', 'key2':'s'}, {'key1':'t', 'key2':'u'} |
我需要最終輸出為:
| ID | 鍵1 | 鍵2 |
|---|---|---|
| 1 | 一種 | b |
| 1 | d | e |
| 1 | 米 | n |
| 2 | r | s |
| 2 | 噸 | 你 |
并計劃爆炸兩次以獲得結果。
雖然,該列result是,StringType()因此我無法使用以下explode函式將其分解:
df.withColumn("output", explode(col("result")))
錯誤:
resultAnalysisException:由于資料型別不匹配,無法決議“explode( )”:函式explode的輸入應該是陣列或映射型別,而不是字串;'專案 [result#9651,explode(result#9651) AS output#9660] - Relation[result#9651] json
請幫助解決這個問題。
uj5u.com熱心網友回復:
首先使用函式將result列轉換為struct結構的陣列from_json,然后使用inline函式將其展開。
json_schema = """
array<struct<key1:string,key2:string>>
"""
df = df.withColumn('result', F.from_json(F.concat(F.lit('['), 'result', F.lit(']')), json_schema)) \
.selectExpr('id', 'inline(result)')
df.show(truncate=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474820.html
下一篇:SparkSQL中的反連接后聯合
