為什麼會有這樣的資料結構出現:
通常都是在讀Json格式的資料時
遇到這種巢狀(nested)結構時,要怎麼處理呢?
會利用
.
或是explode()
去展開所有資料
取資料的方式:
遇到多階層,巢狀,複雜的json格式,要怎麼轉換成row-based 的架構
方法一:暴力解-可以直接將階層全部攤平成同一個layer,但是會導致資料不斷的duplicate的問題
方法二:利用pyspark提供的各種function進行資料的拆解
get_json_object()
data = [("1", '''{"f1": "value1", "f2": "value2"}'''), ("2", '''{"f1": "value12"}''')]
df = spark.createDataFrame(data, ("key", "jstring"))
df.show(truncate=False)
df.select(df.key, get_json_object(df.jstring, '$.f1').alias("c0"), \
get_json_object(df.jstring, '$.f2').alias("c1") ).show()
'''
+---------+---+------------+Original Data+---------+---+------------+
df.show(truncate=False)
+---+--------------------------------+
|key|jstring |
+---+--------------------------------+
|1 |{"f1": "value1", "f2": "value2"}|
|2 |{"f1": "value12"} |
+---+--------------------------------+
+---------+---+------------+Original Data+---------+---+------------+
+---------+---+------------+OUTPUT+---------+---+------------+
df.select(df.key, get_json_object(df.jstring, '$.f1').alias("c0"), \
get_json_object(df.jstring, '$.f2').alias("c1") ).show()
+---+-------+------+
|key| c0| c1|
+---+-------+------+
| 1| value1|value2|
| 2|value12| null|
+---+-------+------+
+---------+---+------------+OUTPUT+---------+---+------------+
'''
善用StructType()處理Json格式,你會看到新世界,搭配參數的設定,便能輕鬆完成資料處理!
如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!
我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~