1

У меня есть 17 ГБ файл bzip2, который содержит 126 миллионов объектов JSON. По одному на каждой строке. Я хотел бы выполнить некоторые вычисления на каждом объекте json, используя jq .

К сожалению, обработка файла bzip2 занимает много времени.

  1. ) Я попытался поместить документ в /dev /shm, чтобы он был в оперативной памяти.
  2. ) У меня есть 56 ядер для работы и 256 ГБ оперативной памяти, поэтому я попытался 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 ответ1

1

bzip2 и друзья являются однопоточными. Это означает, что файлы, сжатые обычным bzip2 , не будут ускоряться при распаковке с помощью pbzip2 . Это слишком мало ценится в многоядерных установках.

Таким образом, в основном вы распаковываете данные на одном ядре, ограничивая вашу пропускную способность. Из этого я не знаю, пока у вас нет возможности заставить компрессор использовать дружественный параллельный компрессор.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .