嵌套的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例子笔记本查看示例代码和结果。

这篇文章有用吗?