Найти в Дзене

CSV vs Parquet vs Arrow: что быстрее в ML‑пайплайнах

Один и тот же датасет в разных форматах хранится по‑разному: CSV пишет строки текстом, Parquet группирует значения по колонкам на диске, Arrow держит колонки в непрерывных блоках памяти. Давайте подробнее рассмотрим каждый вариант. Если что, оригинал лежит тут. 1️⃣ CSV - текст, строка за строкой CSV - это обычный текст: одна строка = одна запись, значения разделены запятыми (или табами). Пример того, как данные выглядят в файле (буквально): ​name,age,city Kanwal,30,New York Qasim,25,Edmonton Типы не “вшиты” в файл - при чтении их обычно нужно определять заново, потому что внутри всё строки. На больших объёмах чтение и парсинг начинают заметно тормозить. 2️⃣ Parquet - бинарный колоночный формат (на диске) Parquet хранит данные колонками: не “строка1‑строка2…”, а “все значения столбца вместе”, поэтому выборочное чтение и сжатие работают лучше. Если взять тот же пример, смысл хранения можно представить так: Names: Kanwal, Qasim Ages: 30, 25 Cities: New York, Edmonton Схема (типы) храни

CSV vs Parquet vs Arrow: что быстрее в ML‑пайплайнах

Один и тот же датасет в разных форматах хранится по‑разному: CSV пишет строки текстом, Parquet группирует значения по колонкам на диске, Arrow держит колонки в непрерывных блоках памяти. Давайте подробнее рассмотрим каждый вариант. Если что, оригинал лежит тут.

1️⃣ CSV - текст, строка за строкой

CSV - это обычный текст: одна строка = одна запись, значения разделены запятыми (или табами). Пример того, как данные выглядят в файле (буквально):

​name,age,city

Kanwal,30,New York

Qasim,25,Edmonton

Типы не “вшиты” в файл - при чтении их обычно нужно определять заново, потому что внутри всё строки. На больших объёмах чтение и парсинг начинают заметно тормозить.

2️⃣ Parquet - бинарный колоночный формат (на диске)

Parquet хранит данные колонками: не “строка1‑строка2…”, а “все значения столбца вместе”, поэтому выборочное чтение и сжатие работают лучше. Если взять тот же пример, смысл хранения можно представить так:

Names: Kanwal, Qasim

Ages: 30, 25

Cities: New York, Edmonton

Схема (типы) хранится вместе с данными, меньше сюрпризов при загрузке. Хорошо подходит для больших таблиц и пакетной обработки (batch).

3️⃣ Arrow - колонки в памяти (максимум скорости для операций)

Arrow тоже колоночный, но ключевое отличие - он ориентирован на работу “в памяти” для быстрых операций над колонками. На уровне идеи данные выглядят так (как они уложены в RAM):

​Names: contiguous memory block storing Kanwal, Qasim

Ages: contiguous memory block storing 30, 25

Cities: contiguous memory block storing New York, Edmonton

Быстрые операции типа фильтрации/маппинга по колонкам за счёт непрерывных блоков. Поддерживается memory mapping - можно обращаться к данным с диска без полной загрузки в RAM.

✅ Какой лучше для ML‑пайплайнов

Практичная стратегия: CSV - для обмена и быстрых черновиков, Parquet - для хранения больших датасетов и продовых выгрузок, Arrow - для ускорения обучения и препроцесса “на месте” (когда важны итерации). Если нужно выбрать один основной формат именно для ML‑пайплайнов (хранение + скорость + типы), чаще всего оптимальный дефолт - Parquet, а Arrow остаётся внутренним “ускорителем” в рантайме библиотек.