解析并写入 JSON Lines 格式文件
Posted
技术标签:
【中文标题】解析并写入 JSON Lines 格式文件【英文标题】:Parse and write JSON Lines format file 【发布时间】:2022-01-12 04:21:27 【问题描述】:我有一个 JSON Lines 格式的文件,其内容如下:
[1, "James", 21, "M", "2016-04-07 10:25:09"]
[2, "Liz", 25, "F", "2017-05-07 20:25:09"]
...
每一行都是一个JSON数组字符串,字段类型有:整数、字符串、整数、字符串、字符串。如何将其转换为具有以下架构的DataFrame
?
root
|-- id: integer (nullable = true)
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
|-- gender: string (nullable = true)
|-- time: string (nullable = true)
相反,如果我有一个DataFrame
,上面的schema,如何生成类似上面JSON Lines格式的文件?
【问题讨论】:
您能否完成 JSON 文件格式和您预期的数据帧?由于提供的数据不是正确的 JSON 文件...需要检查完整的 JSON 文件.. 【参考方案1】:假设您的文件没有标题行,这是从文件创建 df 的一种方法。但我希望有更好的选择。
df = spark.read.text("file_jsonlines")
c = F.split(F.regexp_extract('value', '\[(.*)\]', 1), ',')
df = df.select(
c[0].cast('int').alias('id'),
c[1].alias('name'),
c[2].cast('int').alias('age'),
c[3].alias('gender'),
c[4].alias('time'),
)
+---+--------+---+------+----------------------+
|id |name |age|gender|time |
+---+--------+---+------+----------------------+
|1 | "James"|21 | "M" | "2016-04-07 10:25:09"|
|2 | "Liz" |25 | "F" | "2017-05-07 20:25:09"|
+---+--------+---+------+----------------------+
root
|-- id: integer (nullable = true)
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
|-- gender: string (nullable = true)
|-- time: string (nullable = true)
【讨论】:
以上是关于解析并写入 JSON Lines 格式文件的主要内容,如果未能解决你的问题,请参考以下文章