Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 15 мин
Начальный

Что такое Apache DataFusion

Apache DataFusion — это расширяемый query engine, написанный на Rust, использующий Apache Arrow как in-memory формат данных. DataFusion стал Top-Level Project (TLP) Apache Software Foundation в апреле 2024 года.

Ключевое отличие: DataFusion — библиотека для построения аналитических систем, а не готовая база данных. Вы встраиваете его в своё приложение и расширяете под свои задачи.

Текущие версии

КомпонентВерсияНазначение
DataFusion Core (Rust)v53.0.0 (релиз 2026-04-02)Ядро query engine
DataFusion Pythonv53.0.0Python-биндинги (pip install datafusion)
Apache Cometv0.14.0 (релиз 2026-03-18)Ускоритель Apache Spark через DataFusion
Ballistav48.0.0Распределённое выполнение запросов

Архитектура в двух словах

DataFusion принимает SQL-запрос или DataFrame-операцию и проводит её через pipeline обработки:

  1. Парсинг — SQL превращается в Abstract Syntax Tree (AST)
  2. Логический план — AST трансформируется в дерево логических операций
  3. Оптимизация — серия правил (projection pushdown, filter pushdown, join reordering) преобразует план
  4. Физический план — логические операции заменяются конкретными алгоритмами (HashJoin, SortMergeJoin)
  5. Выполнение — физический план исполняется потоково через Arrow RecordBatch

На каждом этапе DataFusion предоставляет точки расширения: собственные источники данных, функции, правила оптимизации и физические операторы.

Экосистема DataFusion

DataFusion используется как фундамент для нескольких production-систем:

  • InfluxDB — time-series база данных, использует DataFusion как query engine для InfluxDB 3.0
  • Apache Comet (v0.14.0) — транслирует планы выполнения Apache Spark в планы DataFusion, ускоряя Spark-задачи без изменения пользовательского кода
  • Ballista (v48.0.0) — распределённый query engine с архитектурой scheduler/executor, аналог Spark на базе DataFusion
  • Dask SQL — SQL-интерфейс для Dask, использующий DataFusion для парсинга и оптимизации запросов
  • DataFusion Python (v53.0.0) — полноценные Python-биндинги для аналитики и прототипирования

Сравнение с аналогами

ХарактеристикаDataFusionApache SparkDuckDBPolars
ПозиционированиеБиблиотека для построения движковПлатформа распределённых вычисленийВстроенная OLAP-базаБиблиотека обработки DataFrame
Язык ядраRustScala/JavaC++Rust
In-memory форматApache ArrowTungsten (custom)ProprietaryApache Arrow
РасширяемостьВысокая: данные, функции, оптимизатор, операторыСредняя: UDF, data sourcesНизкая: UDF, extensionsНизкая: expressions, plugins
РаспределённостьЧерез Ballista или customВстроеннаяНет (single-node)Нет (single-node)
Типичное применениеВстраивание в custom аналитикуBatch/streaming обработкаЛокальная аналитикаDataFrame-операции
TIP

DataFusion vs остальные

DataFusion не конкурирует напрямую с Spark или DuckDB — он решает другую задачу. Spark — готовая платформа для обработки данных. DuckDB — встроенная база. DataFusion — конструктор, из которого вы собираете своё решение. Если вам нужен query engine с нестандартным источником данных или специфической логикой оптимизации — DataFusion даёт инструменты для этого.

Почему DataFusion важен

DataFusion представляет тренд в data-инженерии: модульные, composable компоненты вместо монолитных платформ. Вместо «один инструмент для всего» — набор библиотек, которые вы комбинируете под свою задачу.

Понимание внутреннего устройства query engine — навык, который применим далеко за пределами DataFusion:

  • Оптимизация запросов — те же принципы работают в PostgreSQL, Spark, Presto
  • Расширяемость — паттерны extensible architecture применимы в любых системах
  • Arrow как lingua franca — понимание Arrow открывает двери в экосистему (Polars, DuckDB, Flight)

В следующем уроке — обзор всех модулей курса и рекомендации по прохождению.

System Design: батч-pipelines

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3