Полируем Parquet

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

Перед нами встала задача проведения эксперимента для исследования различных форматов хранения. Для этого нами были выбраны наиболее популярные форматы, которые ко всему прочему можно открыть в знакомой всем Python библиотеке Pandas (версии 1.5.1):

CSV – или если перевести аббревиатуру «Comma-Separated Values», как значения, разделенные запятыми. Один из наиболее популярных простых форматов и предназначен для представления табличных данных.

Orc – сама аббревиатура Optimized Row Columnar говорит о том, что это оптимизированный строково-столбчатый формат хранения. Был специально разработан, чтобы преодолеть ограничения других возможных форматов хранения.

Parquet – формат данных, который хранит вложенные структуры данных в плоском столбчатом формате. По сравнению с другими строчными подходами, более эффективен в плане хранения и производительности.

Перед началом проведения эксперимента нами были выделены наиболее, на наш взгляд, важные аспекты, которые помогут определить лучший формат хранения:

  1. Скорость чтения файла
  2. Скорость записи файла
  3. Занимаемый объем сохраненного файла

Исследуемые датасеты были сгенерированы с помощью библиотеки SDV. Полученные нами данные имели ровно те же свойства, которые есть у оригинального набора данных. Этот пакет генерирует объемы информации с применением математических методов и ML моделей. К слову, SDV может обрабатывать данные, если они содержат в себе несколько разных типов, а также пустые значения. Всего было сгенерировано несколько датасетов:

● Файл размером ±1 Гб, где размерность составляет (7933070, 15)

● Файл размером ±10 Гб, где размерность составляет (66637788, 15).

(X, Y), где X - количество строк, Y - количество столбцов.

Этого исследуемого набора хватило, чтобы провести сравнительный анализ по скорости чтения и скорости записи файлов. Ссылка на библиотеку SDV: ссылка.

Как уже было сказано ранее, для эксперимента используется Python библиотека Pandas версии 1.5.1. В этой версии есть все необходимые методы для чтения и записи файлов в необходимых для нас форматах, ниже приведена таблица с используемыми методами:

Чтобы измерить скорость чтения и скорость записи будем использовать магическую команду %%time, которая показывает время выполнения конкретной ячейки.

Весь эксперимент разбили на два этапа, где первый этап — это работа с набором данных, содержащий 8 млн строк, а второй этап уже с датасетом, содержащий 66,5 млн строк.

Суть эксперимента в каждом этапе идентична и была разделена на несколько шагов:

  1. Считывание исходного csv файла:

Например,

df = pd.read_csv('df_1gb.csv')

2. Сохранение исходного набора данных в форматы 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')

4. Анализ полученных результатов.

5. Формирование результатов.

Результаты:

Нами были проанализированы все полученные в ходе эксперимента результаты и собраны в итоговую таблицу, которую можно увидеть ниже:

Хочется также отметить, что все результаты проводились на компьютере MacBook Air (2020) с чипом M1 и 8 Гб ОЗУ.

В дальнейшем хотелось бы повторить эксперимент на разных по характеристикам вычислительных машинах.

Вывод:

Исходя из полученных результатов, можно сделать вывод, что формат хранения данных parquet является наиболее оптимальным вариантом для хранения больших объемов данных, так как он позволяет быстро считать данные и занимает мало места, нежели его аналоги csv и orc.

Спасибо за внимание, надеемся, что данная публикация была полезной для Вас!

0
Комментарии
Читать все 0 комментариев
null