嵌套的JSON轉換為DataFrame夷為平地

如何將一個扁平的DataFrame嵌套JSON使用嵌套類。

寫的亞當Pavlacka

去年發表在:2022年5月20日

本文向您展示如何平嵌套的JSON,隻使用美元的“列。*”爆炸方法。

示例JSON文件

將示例JSON字符串傳遞給讀者。

% scala val json = " " {" id ": " 0001 ",“類型”:“甜甜圈”、“名稱”:“蛋糕”、“ppu”: 0.55,“人次”:{“糊”:[{" id ": " 1001 ",“類型”:“普通”},{" id ": " 1002 ",“類型”:“巧克力”},{" id ": " 1003 ",“類型”:“藍莓”},{" id ": " 1004 ",“類型”:“魔鬼的食物”}]},“澆頭”:[{" id ": " 5001 ",“類型”:“沒有一個”},{" id ": " 5002 ",“類型”:“釉”},{" id ": " 5005 ",“類型”:"糖"},{" id ": " 5007 ",“類型”:“糖粉”},{" id ": " 5006 ",“類型”:“巧克力灑”},{" id ": " 5003 ",“類型”:“巧克力”},{" id ": " 5004 ",“類型”:“楓葉”}]}“”“

轉換為DataFrame

添加JSON字符串集合類型,通過它作為輸入spark.createDataset。這將其轉換為一個DataFrame。JSON讀者推斷模式自動從JSON字符串。

這個示例代碼使用集合類型列表,表示為json:零。您還可以使用其他Scala集合類型,如Seq (Scala序列)。

% scala org.apache.spark.sql.functions進口。_進口spark.implicits。_ val DF = spark.read.json(火花。createDataset (json: Nil))

提取和壓平

使用美元的“列。*”爆炸扁平結構的方法和數組類型顯示DataFrame夷為平地。

% scala (DF顯示。選擇(“id”作為“main_id”,美元“名稱”,“人次”美元,美元“ppu”,爆炸(“澆頭”)美元)/ /爆炸超過列使用爆炸,因為它是一個數組類型.withColumn (“topping_id”、“col.id”美元)/ /從山坳中提取topping_id使用點形式.withColumn (“topping_type”、“col.type”美元)/ /從山坳中提取topping_tytpe使用點形式.drop($“上校”).select(“*”、“打者。*”)/ /平麵糊的struct類型擊打者參加數組類型.drop(人次)美元.select(“*”美元,爆炸(“糊”)美元).drop($“糊”).withColumn (“batter_id”、“col.id”美元)/ /從山坳中提取batter_id使用點形式.withColumn (“battter_type”、“col.type”美元)/ /從山坳中提取battter_type使用點形式.drop(“上校”)美元)
刪除

警告

請確保使用所有列名的美元,否則你可能會得到一個錯誤消息:重載方法的價值選擇與選擇

例如筆記本電腦

運行嵌套的JSON DataFrame例子筆記本查看示例代碼和結果。

這篇文章有用嗎?