將嵌套的JSON轉換為扁平的數據幀

如何使用嵌套的case類將扁平的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.這將把它轉換為數據幀。JSON閱讀器自動從JSON字符串推斷模式。

此示例代碼使用列表集合類型,表示為json:零.你也可以使用其他的Scala集合類型,比如Seq (Scala Sequence)。

% scala org.apache.spark.sql.functions進口。_進口spark.implicits。_ val DF= spark.read.jsoncreateDataset (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") //用DOT格式從col中提取batter_id ("battter_type",$"col.type") //用DOT格式從col中提取battter_type (.drop($"col"))
刪除

警告

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

例如筆記本電腦

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