`dask.bag` 读取多行 json 数组时出现 JSONDecodeError

`dask.bag` JSONDecodeError when reading multiline json arrays

当使用 dask.bag 读取 json 文件时,当文件中的 json 是多行时,我得到 JSONDecodeError

import json
import dask.bag as db

db.read_text('single-line.json').map(json.loads).compute()
[[{'a': 'b'}, {'c': 'd'}]]    

db.read_text('multi-line.json').map(json.loads).compute()
JSONDecodeError: Expecting value: line 2 column 1 (char 2)

示例文件如下所示:

单行

[{"a": "b"}, {"c": "d"}]

多线

[
    {"a": "b"},
    {"c": "d"}
]

这是错误还是我遗漏了什么?

还值得注意的是,我可以仅使用标准库读取多行文件

with open('multi-line.json') as f:
    data = f.read()
    print(json.loads(data))

[{'a': 'b'}, {'c': 'd'}]

read_text 函数将文件的每一行解释为一个单独的元素。所以你的包的元素如下所示:

['[', '{"a": "b"}', '{"c": "d"}', ']']

对其中​​一些元素调用 json.loads 将失败。我怀疑如果您的数据是 JSON 行分隔的,您会有更好的时间。如果你有很多这样的 json 文件,那么你也可以使用 dask.delayed.

并行化