Время прочтения: 3 мин.
Перед нами встала задача проведения эксперимента для исследования различных форматов хранения. Для этого нами были выбраны наиболее популярные форматы, которые ко всему прочему можно открыть в знакомой всем Python библиотеке Pandas (версии 1.5.1):
- CSV – или если перевести аббревиатуру «Comma-Separated Values», как значения, разделенные запятыми. Один из наиболее популярных простых форматов и предназначен для представления табличных данных.
- Orc – сама аббревиатура Optimized Row Columnar говорит о том, что это оптимизированный строково-столбчатый формат хранения. Был специально разработан, чтобы преодолеть ограничения других возможных форматов хранения.
- Parquet – формат данных, который хранит вложенные структуры данных в плоском столбчатом формате. По сравнению с другими строчными подходами, более эффективен в плане хранения и производительности.
Перед началом проведения эксперимента нами были выделены наиболее, на наш взгляд, важные аспекты, которые помогут определить лучший формат хранения:
- Скорость чтения файла
- Скорость записи файла
- Занимаемый объем сохраненного файла
Исследуемые датасеты были сгенерированы с помощью библиотеки SDV. Полученные нами данные имели ровно те же свойства, которые есть у оригинального набора данных. Этот пакет генерирует объемы информации с применением математических методов и ML моделей. К слову, SDV может обрабатывать данные, если они содержат в себе несколько разных типов, а также пустые значения. Всего было сгенерировано несколько датасетов:
- Файл размером ±1 Гб, где размерность составляет (7933070, 15)
- Файл размером ±10 Гб, где размерность составляет (66637788, 15).
(X, Y), где X — количество строк, Y — количество столбцов.
Этого исследуемого набора хватило, чтобы провести сравнительный анализ по скорости чтения и скорости записи файлов. Ссылка на библиотеку SDV: ссылка.
Как уже было сказано ранее, для эксперимента используется Python библиотека Pandas версии 1.5.1. В этой версии есть все необходимые методы для чтения и записи файлов в необходимых для нас форматах, ниже приведена таблица с используемыми методами:

Чтобы измерить скорость чтения и скорость записи будем использовать магическую команду %%time, которая показывает время выполнения конкретной ячейки.
Весь эксперимент разбили на два этапа, где первый этап — это работа с набором данных, содержащий 8 млн строк, а второй этап уже с датасетом, содержащий 66,5 млн строк.
Суть эксперимента в каждом этапе идентична и была разделена на несколько шагов:
- Считывание исходного csv файла:
Например,
df = pd.read_csv('df_1gb.csv')
- Сохранение исходного набора данных в форматы orc и parquet, используя между сохранением перезагрузку ядра, чтобы оценить абсолютную скорость записи:
Например,
df.to_orc('df_1gb_orc.orc')
df.to_parquet('df_1gb_parquet.parquet', engine='pyarrow')
3. Считывание данных во всех форматах, используя между чтением перезагрузку ядра, чтобы аналогично как в шаге 2 оценить абсолютную скорость чтения:
df = pd.read_csv('df_1gb.csv')
df = pd.read_orc('df_1gb_orc.orc')
df = pd.read_parquet('df_1gb_parquet.parquet')
- Анализ полученных результатов.
- Формирование результатов.
Результаты:
Нами были проанализированы все полученные в ходе эксперимента результаты и собраны в итоговую таблицу, которую можно увидеть ниже:

Хочется также отметить, что все результаты проводились на компьютере MacBook Air (2020) с чипом M1 и 8 Гб ОЗУ.
В дальнейшем хотелось бы повторить эксперимент на разных по характеристикам вычислительных машинах.
Вывод:
Исходя из полученных результатов, можно сделать вывод, что формат хранения данных parquet является наиболее оптимальным вариантом для хранения больших объемов данных, так как он позволяет быстро считать данные и занимает мало места, нежели его аналоги csv и orc.
Спасибо за внимание, надеемся, что данная публикация была полезной для Вас!