Ivan Begtin
9.35K subscribers
2.12K photos
3 videos
103 files
4.84K links
I write about Open Data, Data Engineering, Government, Privacy, Digital Preservation and etc.

Founder of Dateno https://dateno.io

Telegram @ibegtin
Facebook - https://facebook.com/ibegtin
Email ivan@begtin.tech

Ads/promotion agent: @k0shk
Download Telegram
Я тут думал было запилить гайд по сжатию данных для дата инженеров, но понял что он сведётся в итоге к формуле: сжимай всё в 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
В рубрике интересных проектов по работе с данными LOTUS: A semantic query engine for fast and easy LLM-powered data processing [1] движок для обработки данных с помощью LLM поверх Pandas. Принимает на вход человеческим языком описанные конструкции, переводит их в программные операции над датафреймом.

Является демонстрацией работы из научной работы Semantic Operators: A Declarative Model for Rich, AI-based Analytics Over Text Data [2].

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

Если ещё и Pandas заменить на Polars или иную drop-in альтернативу, то ещё и обработка данных приобретёт хорошую скорость и производительность.

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

Ссылки:
[1] https://github.com/guestrin-lab/lotus
[2] https://arxiv.org/abs/2407.11418

#opensource #datatools #dataengineering #data #ai #llm