`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.
并行化
当使用 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.
并行化