
Введение
Библиотека Hugging Face Datasets упрощает загрузку наборов данных одной командой. Такие данные обычно приходят в форматах CSV, Parquet или Arrow. Все они предназначены для табличных данных, но различаются в работе на низком уровне. Выбор формата влияет на способ хранения, скорость чтения, занимаемое место и точность типов данных. Эти особенности особенно заметны при работе с большими объемами данных и сложными моделями. Мы разберем, как Hugging Face Datasets обрабатывает каждый формат, чем они отличаются на диске и в памяти, и в каких случаях какой лучше применять.
CSV расшифровывается как значения, разделенные запятыми. Это обычный текст: одна строка на запись, столбцы через запятые или табуляцию. Такой файл открывается практически везде — в Excel, Google Sheets, pandas или базах данных. Формат предельно простой и совместимый.
Example: name,age,city
Kanwal,30,New York
Qasim,25,EdmontonHugging Face воспринимает CSV как формат по строкам, то есть читает данные построчно. Для небольших наборов это нормально, но при росте объемов скорость падает. Плюс есть ограничения:
- Отсутствие явной схемы: все в текстовом виде, типы приходится определять при каждой загрузке. Несогласованность данных приводит к ошибкам.
- Большой размер и медленный ввод-вывод: текст раздувает файлы, а преобразование строк в числа нагружает процессор.
Паркет
Parquet — бинарный формат по колонкам. В отличие от CSV, где данные идут строками подряд, здесь значения группируются по столбцам. Это ускоряет чтение и запросы, если нужны отдельные колонки, а сжатие уменьшает размер и трафик. Формат сохраняет схему, чтобы типы не терялись. Он подходит для пакетной обработки и масштабной аналитики, но не для частых мелких правок в файл — лучше для разовых записей больших порций.
Возьмем тот же пример из CSV: в Parquet все имена соберутся вместе, все возраста — отдельно, города — тоже. Получается колоночная структура:
Names: Kanwal, Qasim
Ages: 30, 25
Cities: New York, EdmontonК каждой колонке добавляются метаданные: тип данных, минимальные и максимальные значения, количество пустых ячеек, информация о сжатии. Благодаря этому чтение ускоряется, хранение оптимизируется, типы остаются верными. Алгоритмы вроде Snappy или Gzip дополнительно сжимают место на диске. Вот ключевые плюсы:
- Сжатие: повторяющиеся значения в колонках сжимаются отлично. Файлы компактные и дешевые в хранении.
- Чтение по колонкам: загружаются только нужные столбцы, запросы работают быстрее.
- Поддержка типов: схема фиксируется, типы не угадываются заново.
- Масштабируемость: справляется с миллионами или миллиардами строк.
Arrow
Arrow отличается от CSV и Parquet. Это колоночный формат, ориентированный на память для быстрых вычислений. В Hugging Face любой Dataset строится на таблице Arrow, независимо от исходного формата — CSV, Parquet или самого Arrow. С тем же примером данных Arrow хранит колонки в непрерывных блоках памяти:
Names: contiguous memory block storing Kanwal, Qasim
Ages: contiguous memory block storing 30, 25
Cities: contiguous memory block storing New York, EdmontonБлагодаря сплошным блокам операции над колонкой — фильтрация, преобразования или суммы — выполняются молниеносно. Arrow поддерживает отображение памяти, чтобы обращаться к данным на диске без полной загрузки в RAM. Основные преимущества:
- Чтение без копирования: файлы отображаются в память напрямую, без переноса всего в RAM.
- Быстрый доступ к колонкам: колоночная структура позволяет векторизованные операции.
- Расширенные типы: работает с вложенными данными, списками, тензорами.
- Совместимость: интегрируется с pandas, PyArrow, Spark, Polars и другими.
Итоги
Hugging Face Datasets позволяет легко менять форматы. Применяйте CSV для быстрых тестов, Parquet для хранения больших таблиц, Arrow для ускорения обучения в памяти. Понимание различий помогает держать пайплайн быстрым и простым, чтобы сосредоточиться на модели.