解析并写入 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 格式文件的主要内容,如果未能解决你的问题,请参考以下文章

JSON Lines

JSON Lines

如何以正确的格式写入 JSON 文件

java中如何把输入的数据以json格式保存在文本里面

使用Java开发 接收一个Json文件,然后解析Json 并按照特定的Csv格式转换,输出Csv格式的文件,求案例谢谢

python操作:json文件中存在NumberInt(0),没有引号,无法解析?