Раздел 26 · Data Engineering

Spark в дата-пайплайне: облако, форматы и что дальше

junior~15 мин

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

Блок подходит к концу, и пора собрать всё вместе. Каждую ночь приложение «Гонца» кладёт в озеро сырую выгрузку заказов за день. К утру Отто должен видеть витрину: сколько заказов было в каждой зоне и какая доля опоздала. Между выгрузкой и витриной работает Spark, а запускает его Airflow. Сегодня построим этот путь целиком и посмотрим, где Spark стоит в карте инструментов данных.

Слои озера

Данные в озере обычно лежат слоями, как товар на складе: приёмка, полки, витрина магазина.

  • Сырой слой (raw): файлы как пришли, со всеми дублями и мусором. Его не трогают, чтобы всегда можно было пересчитать всё с начала.
  • Очищенный слой (clean или silver): типы проверены, дубли убраны, пояса времени приведены, битые строки отброшены или отложены.
  • Витрины (marts или gold): агрегаты под конкретные вопросы, которые читают дашборды.

Вы уже видели эту идею в уроке про слои dbt: там слои живут в хранилище, здесь в озере. Spark делает переходы между слоями там, где данных слишком много для хранилища или где они ещё не таблицы.

Пайплайн «Гонца»

Скрипт ниже делает весь путь за одну ночь:

  1. Читает сырую выгрузку с явной схемой, как в уроке про DataFrame.
  2. Чистит: убирает дубли заказов, отбрасывает строки без зоны и цены, вычисляет опоздание с поправкой на пояс.
  3. Соединяет с маленьким справочником зон через broadcast.
  4. Считает витрину по дню и зоне.
  5. Пишет её в Parquet по папкам дней с перезаписью: повторный запуск за тот же день заменит его, а не задвоит. Это та же идемпотентность, что в уроке про Airflow.

Из 411 сырых строк осталось 408: одна строка была дублем, у одной цена «n/a», у одной пустая зона. Хуже всех 30 июня «Сортировка»: 20 опозданий из 24 заказов, 83%. Это та зона, где курьеров мало, и Отто видел это в каждом блоке курса.

В Spark UI четыре задания: два count() для контроля, запись и чтение витрины для проверки. В задании записи видно всё, что мы прошли: стадию broadcast со справочником зон, SortAggregate от dropDuplicates и HashAggregate витрины.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.