Сравнение производительности библиотек 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 с.