BEGTIN Telegram 6274
Я тут думал было запилить гайд по сжатию данных для дата инженеров, но понял что он сведётся в итоге к формуле: сжимай всё в Parquet с компрессией Zstd

Это работает для если не всех, то большинства случаев, а всё остальное было бы просто обоснованием этого тезиса с результатами тестов на живых и синтетических данных.

Тем не менее несколько лайфхаков:
1. Сжимать CSV файлы с булевыми значениями в виде 0/1 эффективнее чем преобразовывать в Parquet потому что по умолчанию эти значения распознаются как числа int64 и даже сжатый parquet файл крупнее чем архивный.
2. Распространять файлы в унаследованных архиваторах типа ARJ - это жуткий моветон, они крайне неэффективны в потоковой обработке.
3. Большая часть инструментов загрузки датафреймов поддерживают сжатые csv файлы, но по разному. Pandas умеет открывать .xz,.gz,.zip,.zst,.bz2, а вот duckdb умеет только .gz и .zst, а остальные придётся распаковывать промежуточно куда-то ещё. Polars тоже умеет работать с .gz, а для остальных форматов сжатия надо прикладывать доп усилия.
4. Всё сводится в итоге к балансу между объёмов хранения данных, поддержкой основными инструментами аналитика и скоростью чтения данных. По этим категориям Parquet оказывается на первом месте потому что данные сжаты лучше чем большинством способов сжатия данных, чтение происходит чуть ли не быстрее чем читать файлы CSV и поддерживается он большинством современных инструментов.
5. Небольшие трюки с Parquet связаны с его колоночным сжатием данных. Уровень сжатия может зависеть и от формы представления данных. Например, если у Вас датасет с ежемесячными показаниями, то если период записывать как отдельные поля year и month, а не как дату начала месяца типа "2024-12-01", только на сжатии этой колонки можно сэкономить до 25%, потому что колонки year и month сожмутся куда лучше.
6. Аналогично с полями с булевыми значениями. Для сжатия лучше если это родное булевое поле в parquet, а не число или строка. И если булевые значения в CSV описаны как True/False, то при преобразовании/распознавании они идентифицируются как таковые. А если записаны как 0/1 или Yes/No и тд., то нет

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

В итоге если хотите опубликовать большой набор данных - публикуйте в Parquet с внутренним сжатием, не ошибётесь.

#dataformats #dataengineering



tgoop.com/begtin/6274
Create:
Last Update:

Я тут думал было запилить гайд по сжатию данных для дата инженеров, но понял что он сведётся в итоге к формуле: сжимай всё в Parquet с компрессией Zstd

Это работает для если не всех, то большинства случаев, а всё остальное было бы просто обоснованием этого тезиса с результатами тестов на живых и синтетических данных.

Тем не менее несколько лайфхаков:
1. Сжимать CSV файлы с булевыми значениями в виде 0/1 эффективнее чем преобразовывать в Parquet потому что по умолчанию эти значения распознаются как числа int64 и даже сжатый parquet файл крупнее чем архивный.
2. Распространять файлы в унаследованных архиваторах типа ARJ - это жуткий моветон, они крайне неэффективны в потоковой обработке.
3. Большая часть инструментов загрузки датафреймов поддерживают сжатые csv файлы, но по разному. Pandas умеет открывать .xz,.gz,.zip,.zst,.bz2, а вот duckdb умеет только .gz и .zst, а остальные придётся распаковывать промежуточно куда-то ещё. Polars тоже умеет работать с .gz, а для остальных форматов сжатия надо прикладывать доп усилия.
4. Всё сводится в итоге к балансу между объёмов хранения данных, поддержкой основными инструментами аналитика и скоростью чтения данных. По этим категориям Parquet оказывается на первом месте потому что данные сжаты лучше чем большинством способов сжатия данных, чтение происходит чуть ли не быстрее чем читать файлы CSV и поддерживается он большинством современных инструментов.
5. Небольшие трюки с Parquet связаны с его колоночным сжатием данных. Уровень сжатия может зависеть и от формы представления данных. Например, если у Вас датасет с ежемесячными показаниями, то если период записывать как отдельные поля year и month, а не как дату начала месяца типа "2024-12-01", только на сжатии этой колонки можно сэкономить до 25%, потому что колонки year и month сожмутся куда лучше.
6. Аналогично с полями с булевыми значениями. Для сжатия лучше если это родное булевое поле в parquet, а не число или строка. И если булевые значения в CSV описаны как True/False, то при преобразовании/распознавании они идентифицируются как таковые. А если записаны как 0/1 или Yes/No и тд., то нет

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

В итоге если хотите опубликовать большой набор данных - публикуйте в Parquet с внутренним сжатием, не ошибётесь.

#dataformats #dataengineering

BY Ivan Begtin


Share with your friend now:
tgoop.com/begtin/6274

View MORE
Open in Telegram


Telegram News

Date: |

The main design elements of your Telegram channel include a name, bio (brief description), and avatar. Your bio should be: Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. The group’s featured image is of a Pepe frog yelling, often referred to as the “REEEEEEE” meme. Pepe the Frog was created back in 2005 by Matt Furie and has since become an internet symbol for meme culture and “degen” culture. Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link).
from us


Telegram Ivan Begtin
FROM American