我正在学习Scala,并且尝试从一个大型嵌套json文件中筛选出一些列,以使其成为一个DataFrame。
{
“meta”:
{“a”: 1, b: 2”} // I want to ignore meta
“objects”:
[
{
“caucus”: “Progressive”,
“person” :
{
“name”: “Mary”,
“party”: “Green Party”,
“age”: 50,
“gender”: “female” // etc..
}
}, // etc.
]
}
因此,数据看起来像这样,用spark读入。
val df = spark.read.json("file")
df.show()
+--------------------+--------------------+
| meta| objects|
+--------------------+--------------------+
|[limit -> 100.0, ...|[[, [116.0, 117.0...|
+--------------------+--------------------+
而不是这样,我想要一个DataFrame与列:姓名|党|核心小组。
我已经对explode()进行了一些修改,并将该模式重新生成为StructType(),但不确定通常如何处理这样的嵌套结构。
1条答案
按热度按时间ddhy6vgd1#
没有通用的方法来处理它,因为它当然取决于数据的形状。在您的例子中,您希望分解一个数组,这将创建一个名为
col
的列,该列将包含struct。然后,您可以使用点标记法访问struct中的字段,因此,要提取您要求的字段,您可以执行以下操作: