我有一个巨大的json文件(大约30 GB),我需要使用它。用python的json或cjson模块解码它太慢了。
我有什么方法可以
a)智能地分割文件(不是通过行,而是我的json对象)或 b)非常快速地解码这个巨大的json。
由于
答案 0 :(得分:0)
如果您不了解JSON文件的结构,除了使用速度更快的JSON解码器(例如可以进行流式传输的ijson或ujson)之外,您几乎无能为力。
如果你需要在内存中同时拥有python中的所有数据,那么速度会受到交换/没有足够物理RAM的影响 - 在这种情况下添加更多内存可能会有所帮助(显而易见)事实上,我认为值得一提。)
如果您不需要通用解决方案,请自行检查文件的结构,并了解如何拆分它。例如。如果它是一个无论什么的数组,可能很容易分离数组元素,尽可能复杂,手动,并分成任何大小的块。
P.S。您可以随时测试下限是什么,只需将30GB文件作为二进制数据读取,丢弃数据 - 如果您正在从网络读取,网络速度可能是瓶颈;如果你需要在内存中包含所有数据,只需创建相同大小的样本数据,并且由于交换等原因可能需要相同的5小时。
答案 1 :(得分:0)
为什么不使用cat
将json拆分成更小的部分,就像这样:
$ cat data.json | jq -c -M '.data[]' | sed 's/\\"/\\\\"/g' | \
while read line; do echo $line > parts/$(date +%s%N).json; done