如何在Python中拆分大型JSON文件(或极快解码)

1 投票
2 回答
1655 浏览
提问于 2025-04-18 18:25

我有一个非常大的json文件(大约30GB),我需要处理它。用Python的json或cjson模块来解码这个文件太慢了。

有没有什么办法可以:

a) 智能地拆分这个文件(不是按行拆分,而是按json对象拆分),或者

b) 快速解码这么大的json文件。

谢谢!

2 个回答

1

为什么不使用 cat 命令把 JSON 文件拆分成更小的部分呢,就像这样:

$ cat data.json | jq -c -M '.data[]' | sed 's/\\"/\\\\"/g' | \
  while read line; do echo $line > parts/$(date +%s%N).json; done
1

如果你不知道你的JSON文件的结构,那你能做的事情就不多了,除了使用更快的JSON解码器,比如ijson(这个可以流式处理)或者ujson

还有一种情况,如果你需要同时在Python中加载所有数据,而你的电脑内存不够,速度就会受到影响。这时候,增加内存可能会有帮助(虽然这听起来很明显,但我觉得还是值得提一下)。

如果你不需要一个通用的解决方案,可以自己检查文件的结构,看看怎么拆分它。例如,如果它是一个数组,可能很容易手动分开数组中的元素,尽管它们可能很复杂,然后把它们分成任意大小的块。

附注:你可以通过把30GB的文件当作二进制数据读取来测试最低限度的速度,丢掉数据。如果你是从网络读取,网络速度可能会成为瓶颈;如果你需要把所有数据都放在内存中,可以创建一份同样大小的样本数据,可能也会因为内存交换等原因花费同样的5个小时。

撰写回答