逐行提取 bzip2 文件

逐行提取 bzip2 文件

我有一个 17GB 的 bzip2 文件,其中包含 1.26 亿个 json 对象。每行一个。我想使用 对其上的每个 json 对象执行一些计算jq

不幸的是,处理 bzip2 文件需要很长时间。

  1. )我尝试将文档放到 /dev/shm 以便它位于 RAM 中。
  2. ) 我有 56 个核心和 256GB 的 RAM,所以我尝试pbzip2 -d解压缩,但是,它似乎并没有给我带来任何合理的加速。

pbzip2 -m5000 -d --stdout measurement.json.bz2 | pv -l -cN pbzip2 | parallel --pipe --line-buffered 'jq -rc "select(.value.error==null)"' | pv -l -cN results > out.res

不幸的是,这只能给我大约 20k 行/秒的 pbzip2 级别速度,需要大约 2 小时才能完全扫描整个文档。

问题是,由于文档包含大量独立的 JSON 对象,我认为没有必要自上而下地解压缩它。有没有办法按行并行解压缩 bzip2 文件以更好地利用并行化?

答案1

bzip2和朋友都是单线程的。这意味着,使用压缩的文件常规的 bzip2使用 解压缩时不会看到加速pbzip2。这是多核设置中很少被重视的一个事实。

因此,基本上您是在单核上解压缩,从而限制了吞吐量。据我所知,没有办法摆脱这种情况,只要您无法让压缩端使用并行友好的压缩器即可。

相关内容