【发布时间】:2020-09-06 08:58:48
【问题描述】:
我已将 json 文件读入数据框。 json 可以有一个特定于名称的结构字段消息,如下所示。
Json1
{
"ts":"2020-05-17T00:00:03Z",
"name":"foo",
"messages":[
{
"a":1810,
"b":"hello",
"c":390
}
]
}
Json2
{
"ts":"2020-05-17T00:00:03Z",
"name":"bar",
"messages":[
{
"b":"my",
"d":"world"
}
]
}
当我将 jsons 中的数据读取到 Dataframe 中时,我得到如下架构。
root
|-- ts: string (nullable = true)
|-- name: string (nullable = true)
|-- messages: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- a: long (nullable = true)
| | |-- b: string (nullable = true)
| | |-- c: long (nullable = true)
| | |-- d: string (nullable = true)
这很好。现在,当我保存到按名称分区的 parquet 文件时,如何在 foo 和 bar 分区中有不同的模式?
path/name=foo
root
|-- ts: string (nullable = true)
|-- name: string (nullable = true)
|-- messages: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- a: long (nullable = true)
| | |-- b: string (nullable = true)
| | |-- c: long (nullable = true)
path/name=bar
root
|-- ts: string (nullable = true)
|-- name: string (nullable = true)
|-- messages: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- b: string (nullable = true)
| | |-- d: string (nullable = true)
当我从根路径读取数据时,如果我得到包含 foo 和 bar 的所有字段的架构,我很好。但是当我从 path/name=foo 读取数据时,我只期望 foo 模式。
【问题讨论】:
标签: apache-spark apache-spark-sql parquet