#compression #pandas
Часто бывает, что приходится джойнить много файлов: всякие там csv, parquet, feather, pickle, с текстом и без, разные типы столбцов, и не всегда понятно, какой формат выбрать для промежуточного и финального хранения данных. Уже второй раз сталкиваюсь с КРАТНОЙ разницей по времени обработки (записи, чтения) и размеру итоговых файлов, а также по использованию CPU и RAM. А значит, пришло время написать утилитку быстрого тестирования. Идея в том, чтобы отдать ей небольшой кусок основного файла, посмотреть сравнительную таблицу каждой комбинации формата/сжатия, и принять решение, в каком же формате и с какими параметрами сжатия его хранить.
https://www.youtube.com/watch?v=u4rsA5ZiTls
Часто бывает, что приходится джойнить много файлов: всякие там csv, parquet, feather, pickle, с текстом и без, разные типы столбцов, и не всегда понятно, какой формат выбрать для промежуточного и финального хранения данных. Уже второй раз сталкиваюсь с КРАТНОЙ разницей по времени обработки (записи, чтения) и размеру итоговых файлов, а также по использованию CPU и RAM. А значит, пришло время написать утилитку быстрого тестирования. Идея в том, чтобы отдать ей небольшой кусок основного файла, посмотреть сравнительную таблицу каждой комбинации формата/сжатия, и принять решение, в каком же формате и с какими параметрами сжатия его хранить.
https://www.youtube.com/watch?v=u4rsA5ZiTls
YouTube
This INCREDIBLE trick will speed up your data processes.
In this video we discuss the best way to save off data as files using python and pandas. When you are working with large datasets there comes a time when you need to store your data. Most people turn to CSV files because they are easy to share and universally…
#pandas #compression
Итак, результаты бенчмарка на фрейме пандас с широким текстовым столбцом. Код в комментах.
Pandas: 2.0.3, DF size: 7.15Mb, Dtypes: {dtype('O'): 17, dtype('float64'): 2, dtype('float32'): 2, dtype('<M8[ns]'): 1}
Лучшие результаты показал пикл+xz сжатие. Наименьший итоговый размер файла, очень быстрое чтение, правда, за счёт долгой записи.
Паркетный brotli ошарашил своим экстремально долгим архивированием. Но только в реализации fastparquet! В версии pyarrow brotli оказался лучшим паркетным вариантом для моей конкретной задачи.
Итак, результаты бенчмарка на фрейме пандас с широким текстовым столбцом. Код в комментах.
benchmark_dataframe_compression(df=df, head=1000, benchmark_dir_path=r"R:\Data", nrepeats=10, verbose=True)
Pandas: 2.0.3, DF size: 7.15Mb, Dtypes: {dtype('O'): 17, dtype('float64'): 2, dtype('float32'): 2, dtype('<M8[ns]'): 1}
Лучшие результаты показал пикл+xz сжатие. Наименьший итоговый размер файла, очень быстрое чтение, правда, за счёт долгой записи.
Паркетный brotli ошарашил своим экстремально долгим архивированием. Но только в реализации fastparquet! В версии pyarrow brotli оказался лучшим паркетным вариантом для моей конкретной задачи.
✍1