将数百万个JSON文件有效地附加到单个文件中

时间:2016-06-13 09:12:55

标签: python json jq large-data

我有数百万个json文件需要作为json dicts列表附加到单个json文件中:

每个json文件包含以下dict:

{
  "finent": "abc",
  "findeplabel": "lbl",
}

应该作为一个dicts列表组合成一个json文件:

[{
  "finent": "abc",
  "findeplabel": "lbl",
},
{
  "finent": "abc",
  "findeplabel": "lbl",
}...]

使用" cat"的问题命令等是输入文件的数量很大,最终文件大小可以是> 8GB。

效率低下的版本:cat *.json|replace "}\n{" "},{" 那么,为了提高效率,理想地同时合并json文件的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

以下脚本(slurp.sh)举例说明了使用bash的直接方法。 可以根据相关JSON文件的指定方式轻松修改它。

我怀疑开发和测试更复杂的解决方案需要花费更长的时间才能节省执行时间,但如果你想试验并行性,你可能会考虑使用GNU {{1} }命令。

我已经使用100,000个琐碎的.json文件对脚本进行了测试和基准测试 在一个目录中。在我6岁的计算机上,以下调用大约需要8分钟(挂钟时间), 其中jq调用大约需要0.2秒。

parallel

剧本:

$ ./slurp.sh | jq length
100000

答案 1 :(得分:0)

我不能谈论它的效率,但是对于jq,它只是将所有文件混合在一起的问题:

jq -s '.' *.json

答案 2 :(得分:0)

我找到了一种非常有效的方法:

 ls |xargs -n 10000 -P 8 jq -s '.' >>../jsonparsed

这会产生8个并发进程,每个进程有10k个参数并写入单个jsonfile jsonparsed