Learning Platform
Глоссарий Troubleshooting
Урок 14.01 · 18 мин
Продвинутый
capstonearchitecturerequirementsDataFusion Pythonanalytics enginesystem design

Capstone: проектирование аналитического движка

На протяжении курса вы изучали DataFusion послойно: от Arrow-формата (модуль 1) через архитектуру движка (модуль 2) до распределённого выполнения (модуль 8). В этом модуле вы соберёте знания воедино, спроектировав и реализовав мини аналитический движок.

Задание

Построить аналитическую систему на DataFusion Python, которая:

  1. Загружает данные из Parquet-файлов (arrow-формат на диске --- модуль 1)
  2. Регистрирует пользовательские функции (UDF/UDAF --- модуль 4)
  3. Выполняет SQL-запросы и DataFrame-операции (модуль 3 и модуль 4)
  4. Генерирует отчёты в Parquet-формате
  5. Использует расширяемость DataFusion (кастомные источники --- модуль 5)

Контекст: почему DataFusion Python

В модуле 4 вы освоили Python-биндинги DataFusion. Для capstone-проекта Python --- оптимальный выбор:

  • Быстрый прототип: Python позволяет итерировать без компиляции Rust
  • Тот же движок: Python API вызывает тот же Rust-код через PyO3 --- производительность на уровне нативного DataFusion
  • Готовая экосистема: PyArrow, Pandas, Parquet --- всё доступно из pip
NOTE

Capstone-проект не требует знания Rust. Все упражнения выполняются на DataFusion Python, который вы изучали в модуле 4.

Спецификация требований

Данные

Система работает с двумя Parquet-файлами:

Схема данных
sales_events.parquet10 000 записей о продажах — event_id, timestamp, category, region, channel, amount, quantity
products.parquet200 продуктов в 5 категориях — product_id, name, category, base_price, weight_kg

10 000 записей о продажах и 200 продуктов в 5 категориях. Данные генерируются при сборке Docker-образа (скрипт generate_data.py).

Функциональные требования

ТребованиеОписаниеМодуль курса
FR-1Автоматическая регистрация Parquet-файлов как таблицM04: register_parquet
FR-2Скалярный UDF для классификации выручкиM04: udf()
FR-3Агрегатный UDAF для средневзвешенного значенияM04: Accumulator
FR-4SQL-аналитика: сводки, группировки, сортировкиM03: SQL API
FR-5DataFrame-аналитика: фильтрация, агрегацияM04: DataFrame API
FR-6Экспорт отчётов в ParquetM01: Parquet формат

Архитектура

Архитектура мини аналитического движка
Parquet-файлыВходные Parquet-файлы с данными продаж и продуктов
CSV / JSON (опционально)Опциональные источники — CSV и JSON файлы
DataLoaderАвтоматическая регистрация файлов как таблиц в SessionContext — аналог каталога
SessionContext + UDF RegistryЯдро движка — SQL и DataFrame API + зарегистрированные пользовательские функции
SQL-запросыSQL-интерфейс — GROUP BY, JOIN, ORDER BY для аналитических сводок
DataFrame APIПрограммный интерфейс — filter, aggregate, select для обработки данных
Parquet-отчёты (data/reports/)Финальные Parquet-отчёты сохраняются в директорию data/reports/

Движок состоит из четырёх слоёв:

  1. DataLoader --- регистрирует файлы данных как таблицы в SessionContext. Аналог каталога в полноценных системах (модуль 5 --- кастомные TableProvider).

  2. UDF Registry --- регистрирует бизнес-функции. В промышленных системах это часть плагин-архитектуры (модуль 5 --- кастомные функции).

  3. Query Layer --- SQL и DataFrame API для аналитических запросов. DataFusion транслирует оба интерфейса в один LogicalPlan (модуль 2).

  4. Report Generator --- сохраняет результаты в Parquet. В production-системах этот слой отправляет данные в объектное хранилище или Flight-сервис (модуль 4).

Подготовка к лабораторной

Развёртывание среды

Лабораторные файлы находятся в labs/capstone/. Для запуска Docker-среды:

cd labs/capstone
docker compose up -d --build
docker compose exec lab bash

Структура упражнений

Три упражнения с нарастающей сложностью:

УпражнениеФайлЦель
1. Исследование данныхexercises/01_explore_data.pyЧтение Parquet, SQL, DataFrame API
2. Пользовательские функцииexercises/02_custom_udf.pyUDF, UDAF, комбинированные запросы
3. Аналитический движокexercises/03_analytics_engine.pyПолный конвейер: загрузка, UDF, аналитика, отчёты

Каждое упражнение содержит блоки TODO с подсказками. Раскомментируйте код и дополните реализацию.

TIP

Начните с упражнения 1 --- оно закрепляет базовые операции из модуля 4. Упражнение 3 объединяет всё в единый движок.

Самопроверка перед лабораторной

Перед тем как перейти к практике, убедитесь, что вы помните ключевые концепции:

  • SessionContext --- точка входа в DataFusion Python. Создаётся один раз, используется для регистрации данных и выполнения запросов. Подробно --- урок 4.1.

  • register_parquet --- регистрирует файл как таблицу. После регистрации файл доступен по имени в SQL-запросах. Подробно --- урок 4.1.

  • udf() --- создаёт скалярную пользовательскую функцию. Принимает Python-функцию, типы аргументов, тип результата и volatility. Подробно --- урок 4.4.

  • Accumulator --- базовый класс для UDAF. Реализует state(), update(), merge(), evaluate(). Подробно --- урок 4.4.

  • write_parquet --- сохраняет DataFrame в Parquet-файл. Подробно --- урок 4.2.

Итоги

В этом уроке вы получили:

  • Постановку capstone-задачи --- мини аналитический движок на DataFusion Python
  • Спецификацию данных и функциональных требований
  • Архитектуру системы с чёткими слоями
  • Подготовку Docker-среды для лабораторной работы

В следующем уроке переходим к практике --- реализуем движок в Docker-лаборатории.

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 5. Архитектура мини аналитического движка состоит из четырёх слоёв: DataLoader, UDF Registry, Query Layer и Report Generator. Какой слой отвечает за то, что SQL и DataFrame API генерируют одинаковый план выполнения?

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

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

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

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