Сравнение производительности библиотек VAEX и DASK

Автор: Пальмов С.В., Шаталов Н.В.

Журнал: Инфокоммуникационные технологии @ikt-psuti

Рубрика: Новые информационные технологии

Статья в выпуске: 1 (85) т.22, 2024 года.

Бесплатный доступ

Цель исследования заключалась в сравнении производительности библиотек Vaex и Dask, предназначенных для повышения эффективности процесса обработки данных. Для решения поставленной задачи были проведены эксперименты, связанные с оценкой временных затрат на выполнение различных классов операций. Исследование включало подготовку датасетов, формирование выборок данных, настройку исполнительных сред, установку и настройку указанных выше модулей, написание скриптов на языке Python, тестирование производительности и последующий анализ результатов. Было установлено, что Vaex демонстрирует высокое быстродействие в случае обработки больших наборов данных, состоящих из миллиона объектов, на одном локальном компьютере; показатели Dask уступают первой библиотеке. Сей факт указывает на то, что Vaex является более эффективным инструментом для обработки крупных датасетов в условиях, аналогичных использованным в настоящей работе. Результаты и выводы исследования подчеркивают значимость выбора оптимальной библиотеки при обработке данных большого объема, а также подтверждают преимущества библиотеки Vaex в данном контексте.

Еще

Vaex, dask, python, большие данные, обработка данных

Короткий адрес: https://sciup.org/140307957

IDR: 140307957   |   DOI: 10.18469/ikt.2024.22.1.12

Текст научной статьи Сравнение производительности библиотек VAEX и DASK

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

Среди множества разнообразных решений, предназначенных для работы с данными, выделяются Vaex [1] и Dask [2] – две популярные библиотеки, способные обрабатывать большие датасе-ты и выполнять с ними сложные операции.

Целью настоящей работы являлась проверка гипотезы о том, что Vaex окажется предпочтительнее для обработки и анализа крупных объемов данных по сравнению с Dask при работе на локальной машине. В ходе исследования было проведено сравнение функциональности, особенностей и производительности обеих библиотек, а также рассмотрены сценарии, в которых каждая из них может продемонстрировать наибольшую эффективность.

Dask и Vaex

Dask [3] реализует параллельные вычисления. Она способна обрабатывать массивы данных, превышающие объем оперативной памяти компьютера. Одним из ключевых преимуществ Dask является масштабируемость для работы с кластерами.

Vaex [5], с другой стороны, также предоставляет высокопроизводительные инструменты для работы с данными, но фокусируется на эффективной обработке и анализе больших наборов данных на одиночных компьютерах. Она предлагает альтернативные структуры, оптимизированные для работы с большими объемами информации в оперативной памяти, а также обладает функционалом для быстрой визуализации и анализа данных.

Противопоставление Pandas: различия в работе Dask и Vaex

Датафрейм Dask не полностью совместим с Pandas [4], но указанные библиотеки довольно близки к этому: первая содержит в себе часть функционала, присущего второй.

Vaex в большей степени отличается от Pandas (хотя в плане выполнения базовых операций, таких как чтение данных и вычисление сводной статистики, они очень похожи).

При этом если сравнивать три указанные библиотеки между собой, [6], у каждой можно выделить своим преимущества.

Практическое сравнение библиотек при работе с данными

Технические характеристики компьютера для проводимых экспериментов представлены в таблице 1.

Проведено исследование процесса чтения и преобразования файлов размером 48 Гб на локальном компьютере с использованием библиотек Vaex и Dask. Чтобы повысить удобство процесса чтения CSV-файлов больших размеров [7], было выполнено их конвертирование в формат HDF5. В исследовании задействовано 52 CSV-файла, содержащие различные типы данных (текст, числа, даты и числовые массивы) для тренировочных проектов по машинному обучению [8].

Таблица 1. Технические характеристика локального компьютера

CPU

AMD Ryzen 5 1400

RAM, Гб

16

GPU

NVIDIA Pascal GeForce GTX 1050 Ti GDDR5 4 ГБ

HDD

2 ТБ, 190 Мбайт/сек

HDF5 (Hierarchical Data Format version 5) – это открытый стандарт для хранения и организации больших объемов данных. Он обеспечивает эффективное хранение различных типов разнородных данных, включая числовые массивы, текстовые данные, изображения, аудиофайлы и многое другое. HDF5 представляет собой иерархическую структуру данных, которая позволяет организовывать информацию в виде древовидной структуры, состоящей из групп и датасетов. Группы могут содержать в себе подгруппы и датасеты, чем обеспечивается гибкая организация данных.

На первом шаге эксперимента данные были преобразованы в формат HDF5 с использованием Vaex; временные затраты составили 578 с. Затем выполнялись чтение и обработка этих файлов при помощи той же библиотеки, что заняло 15 c. и 79 с. соответственно. Обработка заключалась в выводе в консоль всех значений переменных, которые оказывались больше 75.

Далее процесс был произведен повторно с использованием библиотеки Dask. Преобразование в HDF5 потребовало 1343 с., чтение и обработка – 49 и 283 с.

Таким образом, в результате данного эксперимента было показано, что с использованием Vaex на локальной машине процесс обработки данных происходил быстрее по сравнению с Dask.

Второй этап эксперимента заключался в исследовании операций над двумя датасетами с суммарным размером 33,86 ГБ. Наборы состояли из случайных чисел от 0 до 100, и содержали миллион строк и тысячу столбцов каждый (рисунок 1).

Код для преобразования формата с помощью Dask взят из официальной документации [11] (рисунок 2). Ч тобы преобразовать два CSV (33,86 ГБ) в два файла HDF5 (14,9 ГБ), Vaex затратил 1106,63 с. (рисунки 3–5).

В ходе эксперимента выяснилось, что Dask не имеет возможности прочитать файлы HDF5 созданные через Vaex.

Неспособность второй библиотеки прочитать результаты конвертации первой может быть объяснена различиями в структуре файлов и способе их записи. Vaex использует оптимизированный формат данных HDF5, что может привести к возникновению специфических особенностей, несовместимых с Dask. Таким образом, для обе- import pandas as pd import numpy as np from os import path n_rows = 1000000

n_cols = 1000

for i in range(l, 3):

df.to_csv(file_path, index=False)

Рисунок 1. Листинг программы создания файлов датасета import datetime import vaex

  • #    фиксируем и выводим время старта работы кода

  • #    фиксируем и выводим время окончания работы кода

  • #    вычитаем время старта ив времени окончания

print('Время работы: 1 + str(finish - start))

Рисунок 2. Листинг программы для конвертирования Vaex v Vaex D:\PycharmProjectsWaex v h csv_files г analysis_1 ,csv jf>analysis_1.hdf5

Рисунок 3. Результаты преобразования файлов

analysis_1

22.04.2024 0:0s

Исходный файл ...

17 757 308 КБ

J analysis_1 ,hdf5

22.04.2024 1:07

Файл "HDF5"

7 813 891 КБ

analysis_2

19.04.2024 23:38

Исходный файл ...

17 757 290 КБ

J analysis_2.hdf5

22.04.2024 1:07

Файл "HDF5"

7 813 891 КБ

Рисунок 4. Информация о преобразованных файлах

Рисунок 5. Время, затраченное на конвертирование файлов Vaex спечения корректной обработки данных было выполнено их повторное преобразование посредством использования функционала второй библиотеки.

Код для конвертирования данных с помощью Dask приведен на рисунке 6.

Конвертирование данных заняло 1837,88 секунд (рисунок 7).

После этого используя различные операции над данными для анализа и визуализации, проверяем производительность данных библиотек. Результаты и названия операций представлены в таблице 2.

Таблица 2. Временные затраты (второй шаг эксперимента)

Операция

Vaex, с.

Dask, с.

Конвертация из CSV в HDF5

1106,63

1837,88

Подсчет всех данных

14,07

Ошибка

Фильтрация(отбор) данных

75,19

138,09

Среднее арифметическое чисел

64,53

133,01

Отфильтрованное среднее

18,17

Ошибка

Отфильтрованный параметр по колоннам

45,97

503,49

Отфильтрованная сумма столбцов

226,08

Ошибка

Вывод 20 строк

440,22

12,55

Добавить колонну

16,65

Ошибка

Ленивая оценка

33,13

221,00

Чтение файла

156,01

5,02

Количество всех значений

120,00

Ошибка

«Ошибка» в таблице 2 означает невозможность выполнения операции, ввиду «торможения» системы и полную остановку ядра.

import datetime import dask.datafname as df

Выводы

В результате проведенного исследования и сравнительного анализа библиотек Vaex и Dask при работе с данными на локальном компьютере, можно сделать следующие выводы.

Необходимость преобразования CSV в формат HDF5 [9] в Vaex может потребовать дополнительного времени, однако это может быть оправдано высокой оптимизацией и возможностью проведения интерактивного анализа на наборах данных, превышающих объем основной памяти компьютера.

Выявилась особенность преобразования файлов Vaex c использованием функции конвертирования. Файлы, преобразованные подобным образом, могут использоваться только с Vaex; попытка их чтения с помощью Dask приводит к возникновению ошибки формата, источником которой может являться использование оптимизированного варианта HDF5 в Vaex.

Dask работает медленнее на локальной машине по сравнению с первой библиотекой, но остается более эффективным решением для вычислительных кластеров. Также стоит отметить, что Dask основан на библиотеке Pandas [12, 13]; это позволяет ему интегрироваться с другими популярными Python-библиотеками, такими как Scikit-learn, NumPy и Scipy, значительно облегчая тем самым анализ данных, процесс машинного обучения и проверку статистических гипотез [10, 14].

Таким образом, выбор между Vaex и Dask зависит от конкретных задач и условий использования: Vaex может быть более предпочтителен при работе с большими объемами данных на одной машине, в то время как Dask может иметь приоритет при использовании вычислительных кластеров. Следовательно, можно утверждать, что проверяемая гипотеза является истинной.

  • #    фиксируем и выводим время старта работы кода start = datetime.datetime.now()

ds = df.read_csv(1csy_fIles/*.csv')

ds.to_hdf('hdf5_files_dask/analysis_03.hdf5‘, key='table')

  • #    фиксируем и выводим время окончания работы кода finish = datetime.datetime.now()

  • #    вычитаем время старта из времени окончания print('Время работы: ' + str(finish - start))

Рисунок 6. Листинг программы для конвертирования Dask

Рисунок 7. Затраченное время на конвертирование файлов Dask

Список литературы Сравнение производительности библиотек VAEX и DASK

  • What is Vaex? URL: https://vaex.readthedocs.io/en/latest/index.html (дата обращения: 15.04.2024).
  • Dask – Dask documentation. URL: https://docs.dask.org/en/stable/ (дата обращения: 15.04.2024).
  • GitHub – dask/dask: Parallel computing with task scheduling. URL: https://github.com/dask/dask (дата обращения: 16.04.2024).
  • NumPy. URL: https://numpy.org/ (дата обращения: 16.04.2024).
  • GitHub – vaexio/vaex. URL: https://github.com/vaexio/vaex (дата обращения: 17.04.2024).
  • Dask vs Vaex – a qualitative comparison. URL: https://vaex.io/blog/dask-vs-vaex-a-qualitativecomparison (дата обращения: 17.04.2024).
  • Как использовать HDF5-файлы в Python. URL: https://habr.com/ru/companies/otus/articles/416309/ (дата обращения: 17.04.2024).
  • 52 датасета для тренировочных проектов. URL: https://habr.com/ru/companies/edison/articles/480408/ (дата обращения: 18.04.2024).
  • Vaex и Dask: когда Pandas не может обработать большие данные. URL: https://python-school.ru/blog/analiz-dannyh/vaex-vs-dask/ (дата обращения: 18.04.2024).
  • Использование библиотеки Vaex для обработки больших объемов данных. URL: https://newtechaudit.ru/ispolzovanie-biblioteki-vaexdlya-obrabotki-bolshih-obyomov-dannyh/ (дата обращения: 19.04.2024).
  • Анализ данных с использованием библиотеки Dask. URL: https://habr.com/ru/companies/otus/articles/759552/ (дата обращения: 19.04.2024).
  • Груздев А.В., Хейдт М. Изучаем pandas / пер. с англ. А.В. Груздева. М.: ДМК, 2019. 682 с.
  • Уэс М. Python и анализ данных. Первичная обработка данных с применением pandas, Numpy и Jupiter / пер. с англ. А.А. Слинкина, 3-е изд. М.: ДМК, 536 с.
  • Васильев Ю.А. Python для data science. СПб.: Питер, 272 с.
Еще
Статья научная