Apache Spark · PySpark · Stepik

Разберись со Spark.
Дойди до причины инцидента.

Начнёшь с небольшого CSV и первых ячеек Jupyter. Научишься читать план, связывать его со Spark UI и проверять результат. Затем применишь это к задачам, где данные или выполнение уже пошли не так.

С основ SparkПрактика в JupyterБез ручной сдачи

Курс в разработке. Локально готовы первые 3 модуля.

Реальный экран из урока 3.2Spark UI
Успешный Job 4 в Spark UI: Stage 6 и Stage 7, связанные через Exchange Увеличить
У каждого запуска есть объяснениеВ уроке связываешь свой action с Job, Stage и Tasks.
Цель курса

Воспроизвести симптом → собрать факты → проверить гипотезу → исправить причину → подтвердить результат.

Что ты научишься делать

Понимать данные.
Объяснять выполнение.

Успешный Job ещё требует проверки результата. Медленная Task требует наблюдений. В курсе ты учишься разбирать оба случая.

01 / Данные

Проверить, что посчитано

Задать схему, определить ключ строки, обработать даты и NULL. Сверить фильтр и агрегат с исходными записями.

Вопрос: почему изменилось число строк?
02 / План

Увидеть работу за кодом

Прочитать explain("formatted"), найти чтение, фильтр и Exchange. Объяснить, где Spark перераспределяет данные.

Вопрос: откуда взялся shuffle?
03 / Выполнение

Найти свой запуск в UI

Связать action с Job, Stage и Tasks. Проверить партиции, ресурсы и повторные вычисления по своему запуску.

Вопрос: какую работу запустила эта строка?
04 / Исправление

Подтвердить вывод

Проверить гипотезу отдельным опытом, сравнить результат до и после, повторить расчёт на другом входе.

Вопрос: чем доказано, что причина устранена?
Внутри курса

Сначала разберёшь пример.
Потом сделаешь свой.

В Stepik читаешь подробный разбор и отвечаешь на вопросы. В Jupyter запускаешь короткие ячейки, меняешь условия и пишешь решение. Пример начинается с небольших данных, которые можно проверить строка за строкой.

01Разбор темы02Опыт в notebook03Твоё решение04Проверка
Урок 3.4: Exchange в физическом плане и Shuffle Write/Read в таблице Stages
Фрагменты урока 3.4План и Spark UI объясняют один и тот же опыт

Находишь Exchange в плане, затем сопоставляешь его с передачей данных между Stage.

Нажми на изображение, чтобы рассмотреть детали.
Урок 3.5: InMemoryTableScan и Exchange в плане расчёта с cache
Урок 3.5Увидеть эффект изменения

Исследуешь повторное выполнение и cache, затем проверяешь, что изменилось в плане.

Урок 2.6: самостоятельная функция проходит локальную проверку на альтернативных данных, B/alternate: OK
Урок 2.6Проверить своё решение на другом входе

В технических уроках есть задачи A на отработку темы и более сложные задачи B. Checker даёт обратную связь по коду.

Вопросы проверяет Stepik. Код проверяется локально в notebook. Ручной сдачи нет; локальный checker не отправляет решение на платформу.

Основная цель курса

Получить симптом.
Проверить причину.

В лаборатории ты получишь тикет, исходные данные и проблемный job. Выбор проверки останется за тобой. Перед этим соответствующий механизм будет разобран в обучающих уроках.

Пример будущей лабораторииJob: SUCCEEDED

После join сумма заказов выросла

Расчёт завершился без ошибки. Результат расходится с контрольной суммой. Твоя задача: найти источник расхождения и сохранить корректную логику расчёта.

ДанныеКлючи и кратность

Какая строка должна быть уникальна? Есть ли несколько совпадений на ключ?

ПланУсловия соединения

Какие стороны и выражения участвуют в join?

РезультатСверка строк

На каком наборе записей появляются дополнительные строки?

ФактыГипотезаПроверкаИсправлениеПовторная сверка
Выполнение

Одна Task задерживает весь Stage

Исследуешь распределение строк, ключи и метрики задач.

Чтение

Фильтр периода читает лишние файлы

Проверяешь структуру dataset и условия отбора партиций.

Запись

Результат разбился на тысячи файлов

Связываешь партиции расчёта с физическими файлами результата.

Лаборатории входят в план модулей 6–7 и сейчас разрабатываются. На странице показан их задуманный формат.

Окружение для практики

Свой Spark-кластер.
У тебя на компьютере.

Склонируешь открытый репозиторий, поднимешь контейнеры и откроешь JupyterLab. Команды запуска, проверки и разбор типовых ошибок будут под рукой в документации стенда.

НачалоJupyter, Spark Master и два Worker. В приложении проверяешь регистрацию двух Executor.

ХранениеMinIO включается отдельным профилем для работы через s3a://.

ИсторияHistory Server нужен для разбора завершённых приложений и event logs.

Открыть репозиторий стенда
Схема учебного стенда
Jupyter, Driver, Spark Master и два Worker Driver работает рядом с Jupyter. Он обращается к Master за ресурсами и взаимодействует с двумя Executor. Каждый Executor запускается в своём Worker. MinIO и History Server включаются отдельно. JUPYTERLABNotebook + DriverТвой код и SparkSession Spark MasterВыделение ресурсов Driver ↔ Executor: задания и результаты Worker 1 Executor 1 Worker 2 Executor 2 ДОПОЛНИТЕЛЬНЫЕ ПРОФИЛИ MinIO / storage History / postmortem
Это учебная топология, которую ты проверяешь на собственном запуске.
Программа курса

От первого notebook
до самостоятельного расследования.

Сначала освоишь механизмы на понятных опытах. Затем соединишь их в инженерных задачах. Программа разделена на семь модулей.

Часть A · Основы и управляемые опытыЛокально готовы модули 1–3
01Зачем Spark и как начатьПервый notebook, стенд и компоненты приложенияГотов локально

Зачем нужен Spark, установка окружения, работа с ячейками и kernel. Первый запуск приложения, Driver, Master, Worker и Executor.

Результат: открываешь Jupyter и находишь своё приложение в кластере.
02DataFrame и первое выполнениеCSV, схема, фильтры, агрегации и Spark SQLГотов локально

Типы и ключи данных, transformations и actions, lazy execution, даты и NULL, агрегации и первый shuffle. Один расчёт через DataFrame API и SQL, проверка значений.

Результат: пишешь обработку и независимо проверяешь её строки и схему.Сложные типы array, struct и explode запланированы отдельным дополнительным уроком.
03План выполнения и Spark UIJobs, Stages, Tasks, партиции, cache и логиГотов локально

Уровни плана, параллелизм, narrow и wide transformations, Exchange, повторные actions и cache. Границы ресурсов Driver и Executor, ошибки и поиск логов.

Результат: объясняешь выполнение через план и наблюдения в UI.
04Файлы, MinIO и ParquetЧтение, запись, партиционирование и pruningВ программе

Доступ через S3A, CSV и Parquet, запись и повторное чтение, partitionBy, pruning и pushdown. repartition, coalesce и маленькие файлы.

Результат: связываешь физическую структуру файлов с чтением и записью.
05Join: корректность и стратегияКардинальность, broadcast, AQE, skew и окнаВ программе

Ключи и число совпадений, типы соединений, несовпавшие строки. SortMergeJoin и BroadcastHashJoin, статистики и AQE, перекос данных и оконные функции.

Результат: проверяешь корректность соединения и выбранную стратегию.
Часть B · Инженерные расследованияРазрабатываются
06Инженерные инцидентыШесть тикетов с проблемным выполнением или результатомВ программе

Приложение не видно в кластере. Метрика выросла после join. Одна Task задерживает Stage. Неожиданный shuffle, лишнее чтение и слишком много выходных файлов.

Результат: выбираешь диагностический маршрут и подтверждаешь исправление.
07Финальное расследованиеНезнакомый инцидент и проверка твоего решенияВ программе

Получишь тикет, данные и проблемный job. Соберёшь факты, проверишь гипотезы, исправишь расчёт и проверишь сохранение требований к результату.

Результат: объясняешь, что произошло и почему исправление работает.

Готовность локальных материалов не означает публикацию на Stepik. Дата открытия и порядок доступа к модулям пока не объявлены.

Кому подойдёт

Python и SQL уже знакомы.
Spark можно начать с нуля.

Начинаешь путь в Data Engineering

Хочешь освоить распределённую обработку последовательно: данные, код, план, выполнение.

Уже пишешь PySpark

Хочешь лучше понимать shuffle, партиции, повторные вычисления и разбирать странный результат.

Нужны функции, условия и коллекции Python, а также SELECT, WHERE, GROUP BY и базовый JOIN. Jupyter, Spark UI и MinIO разберём по ходу курса.

Курс на Stepik

Spark.
Основы и инциденты.

15 000 ₽

Теория, практика в Jupyter и самостоятельные задания с проверками.

  • Подробные текстовые уроки
  • Jupyter notebooks и учебные данные
  • Локальный стенд с документацией
  • Самостоятельные задачи и проверки
  • Лаборатории расследований по программе
Написать мне о курсе

Откроется мой Telegram, @dim4eg91. Напиши «Spark» и расскажи, с чем работаешь сейчас.

Перед стартом

Что нужно знать

Курс уже можно пройти целиком?

Пока курс в разработке. Локально готовы первые три модуля: запуск окружения, DataFrame, планы и Spark UI. Файлы, соединения и лаборатории ещё разрабатываются. Дата открытия не объявлена.

Я никогда не работал со Spark. Подойдёт?

Да, если есть базовые Python и SQL. Начнём с назначения Spark, установки окружения и работы в Jupyter. Новые механизмы будем разбирать на небольших примерах.

Это видео или текстовые уроки?

Основной формат: подробный текст на Stepik, схемы, настоящие скриншоты и Jupyter notebooks. В notebook короткие ячейки с объяснениями, примерами и самостоятельными задачами.

Как проверяются задания?

Вопросы проверяет Stepik. Практический код проверяется локально в notebook. Ручной сдачи и обязательного ревью нет. Локальная проверка не отправляет код на Stepik.

Какой компьютер нужен?

Проверенный ориентир для Windows: 16 ГБ RAM у компьютера, около 8 ГБ для Docker, 4 CPU и 15 ГБ свободного места. Нужны Docker Desktop с Linux containers, PowerShell 7 и Git. Это ориентир по текущему стенду; подробности есть в его документации.

Нужно сначала пройти DE-практикум?

Нет. У Spark-курса собственный стенд и самостоятельный учебный маршрут. Базу Python и SQL нужно иметь до начала.

Будут Streaming, Scala и Kubernetes?

В первой версии курс посвящён batch-обработке в PySpark. Structured Streaming, Scala, MLlib, Kubernetes и облачные платформы в эту программу не входят.