Каково рекомендуемое сжатие для HDF5 для быстрой производительности чтения/записи (в Python/pandas)?

Я несколько раз читал, что включение сжатия в HDF5 может привести к лучшей производительности чтения/записи.

интересно, какие идеальные настройки могут быть для достижения хорошей производительности чтения / записи по адресу:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)

Я уже использую (т. е. h5py), так как это быстрее, чем table. У меня сильные процессоры, и я не очень забочусь о дисковом пространстве.

Я часто в магазине DataFrameС float64 и str типы файлов прибл. 2500 строк x 9000 столбцы.

1 ответов


есть несколько возможных фильтров сжатия, которые можно использовать. С HDF5 версия 1.8.11 вы можете легко зарегистрировать сторонние фильтры сжатия.

по поводу производительности:

Это, вероятно, зависит от вашего шаблона доступа, потому что вы, вероятно, хотите определить правильные размеры для ваших кусков, чтобы он хорошо согласовывался с вашим шаблоном доступа, иначе ваша производительность будет сильно страдать (например, если вы знаете, что обычно доступ к одному столбцу и всем строкам вы должны определить свою форму куска соответственно (1,9000)). См.здесь, здесь и здесь для некоторых информация.

однако панды AFAIK обычно заканчивают загрузку всего файла HDF5 в память, если вы не используете read_table и iterator (см. здесь) или сделайте частичный IO самостоятельно (см. здесь) и, таким образом, на самом деле не так много пользы от определения хорошего размера куска.

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

по поводу вашего первоначального вопроса:

Я бы рекомендовал взглянуть на Blosc. Это многопоточная библиотека meta-compressor, которая поддерживает различные фильтры сжатия:

  • BloscLZ: внутренний дефолт компрессор, сильно основанный на FastLZ.
  • LZ4: компактный, очень популярный и быстрый компрессор.
  • LZ4HC: доработанная версия LZ4, производит лучшие коэффициенты сжатия за счет скорости.
  • Snappy: популярный компрессор, используемый во многих местах.
  • Zlib: классический; несколько медленнее, чем предыдущие, но достижение лучших коэффициентов сжатия.

Они имеют разные сильные стороны, и лучше всего попробовать и сравните их с вашими данными и посмотрите, что работает лучше всего.