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

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

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

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

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

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


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

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

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

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

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

Относительно вашего исходного вопроса:

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

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

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

Оцените статью
techsly.ru
Добавить комментарий