本文向您展示如何平嵌套的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例子筆記本查看示例代碼和結果。