Содержание курса
1. Модуль 1. Большие данные и Apache Spark
7 уроков
23
9
1м
0
Закрытый
1.1
О курсе: как проходить обучение и канал «Логово Дата-Инженера»
↗
15
2
1м 37с
0
Закрытый
1.2
Проблема больших данных: почему один компьютер не справляется
↗
3
2
-
0
Закрытый
1.3
От MapReduce и Hadoop к Spark: что изменил Spark
↗
1
1
-
0
Закрытый
1.4
Архитектура Spark: Driver, Executors и Cluster Manager
↗
1
1
-
0
Закрытый
1.5
Модель вычислений: распределённость, партиции, параллелизм
↗
1
1
-
0
Закрытый
1.6
Экосистема Spark: SQL, Streaming, MLlib, GraphX
↗
1
1
-
0
Закрытый
1.7
Ленивость и DAG: трансформации против действий — обзор
↗
1
1
-
0
2. Модуль 2. Окружение и первое приложение
7 уроков
7
6
0м
0
Закрытый
2.1
Установка Spark локально и зависимости от Java
↗
1
1
-
0
Закрытый
2.2
spark-shell: интерактивная работа со Spark
↗
1
1
-
0
Закрытый
2.3
SparkSession и SparkContext: точки входа
↗
1
1
-
0
Закрытый
2.4
Первый sbt-проект со Spark и его зависимости
↗
1
1
-
0
Закрытый
2.5
Запуск приложения локально в режиме local
↗
1
1
-
0
Закрытый
2.6
Знакомство со Spark UI: что и где смотреть
↗
1
1
-
0
Закрытый
2.7
Логи Spark: как читать и настраивать уровень
↗
1
0
-
0
3. Модуль 3. RDD — фундамент Spark
7 уроков
7
6
0м
0
Закрытый
3.1
Что такое RDD: неизменяемость, партиции, происхождение (lineage)
↗
1
1
-
0
Закрытый
3.2
Создание RDD: parallelize и textFile
↗
1
1
-
0
Закрытый
3.3
Трансформации RDD: map, filter, flatMap
↗
1
1
-
0
Закрытый
3.4
Действия RDD: collect, count, take, reduce, foreach
↗
1
0
-
0
Закрытый
3.5
Ленивость на практике: что и когда выполняется
↗
1
1
-
0
Закрытый
3.6
Партиции RDD: что это такое и сколько их
↗
1
1
-
0
Закрытый
3.7
Кэширование RDD: cache, persist и уровни хранения
↗
1
1
-
0
4. Модуль 4. RDD глубже: пары ключ-значение
9 уроков
3
2
0м
0
Закрытый
4.1
Pair RDD: создание и смысл пар ключ-значение
↗
1
1
-
0
Закрытый
4.2
reduceByKey и groupByKey: почему первый предпочтительнее
↗
1
1
-
0
Закрытый
4.3
aggregateByKey и combineByKey
↗
1
0
-
0
Закрытый
4.4
Объединения на RDD: join и cogroup
↗
0
0
-
0
Закрытый
4.5
sortByKey, keys, values и mapValues
↗
0
0
-
0
Закрытый
4.6
Что такое shuffle и почему он дорогой
↗
0
0
-
0
Закрытый
4.7
Broadcast-переменные
↗
0
0
-
0
Закрытый
4.8
Аккумуляторы (accumulators)
↗
0
0
-
0
Закрытый
4.9
Когда RDD всё ещё нужны, а когда выбрать DataFrame
↗
0
0
-
0
5. Модуль 5. DataFrame и Spark SQL — основы
7 уроков
0
0
0м
0
Закрытый
5.1
Зачем нужен DataFrame поверх RDD и что такое Catalyst
↗
0
0
-
0
Закрытый
5.2
DataFrame, строка Row и схема StructType
↗
0
0
-
0
Закрытый
5.3
Создание DataFrame из коллекций и из файлов
↗
0
0
-
0
Закрытый
5.4
Осмотр данных: printSchema, show и описательная статистика
↗
0
0
-
0
Закрытый
5.5
Задание схемы вручную и типы данных Spark SQL
↗
0
0
-
0
Закрытый
5.6
Чтение CSV: опции header, inferSchema, разделители
↗
0
0
-
0
Закрытый
5.7
Чтение JSON и вложенные структуры
↗
0
0
-
0
6. Модуль 6. Операции с DataFrame: Column API
10 уроков
0
0
0м
0
Закрытый
6.1
select и способы ссылаться на колонку: col, $, апострофы
↗
0
0
-
0
Закрытый
6.2
Выражения над колонками: арифметика и псевдонимы alias
↗
0
0
-
0
Закрытый
6.3
Фильтрация filter и where, логические условия
↗
0
0
-
0
Закрытый
6.4
withColumn, withColumnRenamed и drop
↗
0
0
-
0
Закрытый
6.5
Литералы lit и условные колонки when/otherwise
↗
0
0
-
0
Закрытый
6.6
Строковые функции: concat, substring, lower, regexp и другие
↗
0
0
-
0
Закрытый
6.7
Числовые функции и округление
↗
0
0
-
0
Закрытый
6.8
Дата и время в Spark SQL
↗
0
0
-
0
Закрытый
6.9
Обработка null: isNull, na.fill, na.drop, coalesce
↗
0
0
-
0
Закрытый
6.10
distinct, dropDuplicates, sample и limit
↗
0
0
-
0
7. Модуль 7. Агрегации и группировки
6 уроков
0
0
0м
0
Закрытый
7.1
Агрегатные функции: count, sum, avg, min, max
↗
0
0
-
0
Закрытый
7.2
groupBy и agg: несколько агрегатов сразу
↗
0
0
-
0
Закрытый
7.3
Агрегация по всему DataFrame без группировки
↗
0
0
-
0
Закрытый
7.4
collect_list, collect_set и именованные агрегаты
↗
0
0
-
0
Закрытый
7.5
Сводные таблицы через pivot
↗
0
0
-
0
Закрытый
7.6
Сортировка результатов: orderBy, asc/desc, nulls first/last
↗
0
0
-
0
8. Модуль 8. Объединения данных (Joins)
6 уроков
0
0
0м
0
Закрытый
8.1
Типы join: inner, left, right, full, semi, anti
↗
0
0
-
0
Закрытый
8.2
Синтаксис join в DataFrame API
↗
0
0
-
0
Закрытый
8.3
Дубликаты колонок после join и как их избежать
↗
0
0
-
0
Закрытый
8.4
Broadcast join: ускоряем соединение с маленькой таблицей
↗
0
0
-
0
Закрытый
8.5
Перекос данных (skew) при join и борьба с ним
↗
0
0
-
0
Закрытый
8.6
Cross join и его опасности
↗
0
0
-
0
9. Модуль 9. Spark SQL: язык запросов
6 уроков
0
0
0м
0
Закрытый
9.1
Временные представления: createOrReplaceTempView
↗
0
0
-
0
Закрытый
9.2
Запросы через spark.sql
↗
0
0
-
0
Закрытый
9.3
SQL против DataFrame API: что и когда выбрать
↗
0
0
-
0
Закрытый
9.4
Каталог Catalog, базы данных и таблицы
↗
0
0
-
0
Закрытый
9.5
SQL-функции и выражения, функция expr
↗
0
0
-
0
Закрытый
9.6
Подзапросы и обобщённые табличные выражения (CTE)
↗
0
0
-
0
10. Модуль 10. Dataset и типобезопасность
6 уроков
0
0
0м
0
Закрытый
10.1
Зачем нужен Dataset поверх DataFrame
↗
0
0
-
0
Закрытый
10.2
Dataset[T], case-классы и Encoders
↗
0
0
-
0
Закрытый
10.3
Типобезопасные операции: map, filter, flatMap на Dataset
↗
0
0
-
0
Закрытый
10.4
DataFrame как Dataset[Row] и конвертация через .as[T]
↗
0
0
-
0
Закрытый
10.5
groupByKey и типобезопасные агрегации
↗
0
0
-
0
Закрытый
10.6
Цена типобезопасности: сериализация и производительность
↗
0
0
-
0
11. Модуль 11. Источники данных и форматы
8 уроков
0
0
0м
0
Закрытый
11.1
Единый API чтения и записи: format, option, save
↗
0
0
-
0
Закрытый
11.2
Parquet: колоночный формат и почему он по умолчанию
↗
0
0
-
0
Закрытый
11.3
ORC и сравнение форматов хранения
↗
0
0
-
0
Закрытый
11.4
Режимы записи SaveMode: append, overwrite и другие
↗
0
0
-
0
Закрытый
11.5
Партиционирование при записи (partitionBy)
↗
0
0
-
0
Закрытый
11.6
Bucketing: предварительная раскладка по корзинам
↗
0
0
-
0
Закрытый
11.7
JDBC: чтение и запись в реляционные базы данных
↗
0
0
-
0
Закрытый
11.8
Чтение множества файлов и автоопределение партиций
↗
0
0
-
0
12. Модуль 12. Оконные функции
6 уроков
0
0
0м
0
Закрытый
12.1
Зачем нужны оконные функции. Идея Window
↗
0
0
-
0
Закрытый
12.2
Window.partitionBy и orderBy
↗
0
0
-
0
Закрытый
12.3
Ранжирование: row_number, rank, dense_rank
↗
0
0
-
0
Закрытый
12.4
Агрегаты в окне: sum и avg поверх окна
↗
0
0
-
0
Закрытый
12.5
Функции lag, lead, first, last
↗
0
0
-
0
Закрытый
12.6
Рамки окна: rowsBetween и rangeBetween
↗
0
0
-
0
13. Модуль 13. Сложные типы и пользовательские функции
6 уроков
0
0
0м
0
Закрытый
13.1
Сложные типы: array, map и struct
↗
0
0
-
0
Закрытый
13.2
Функции для массивов: explode, array_contains и другие
↗
0
0
-
0
Закрытый
13.3
Функции высшего порядка в Spark SQL: transform, filter…
↗
0
0
-
0
Закрытый
13.4
UDF: когда они нужны, регистрация и использование
↗
0
0
-
0
Закрытый
13.5
Производительность UDF против встроенных функций
↗
0
0
-
0
Закрытый
13.6
Типобезопасные агрегаторы UDAF (Aggregator)
↗
0
0
-
0
14. Модуль 14. Внутреннее устройство и оптимизация
6 уроков
0
0
0м
0
Закрытый
14.1
Catalyst: логический и физический планы запроса
↗
0
0
-
0
Закрытый
14.2
Метод explain и чтение планов выполнения
↗
0
0
-
0
Закрытый
14.3
Tungsten, кодогенерация и бинарное представление данных
↗
0
0
-
0
Закрытый
14.4
Узкие и широкие зависимости, stages и tasks
↗
0
0
-
0
Закрытый
14.5
Adaptive Query Execution (AQE)
↗
0
0
-
0
Закрытый
14.6
Кэширование как инструмент оптимизации
↗
0
0
-
0
15. Модуль 15. Тюнинг производительности
6 уроков
0
0
0м
0
Закрытый
15.1
Партиции: repartition против coalesce
↗
0
0
-
0
Закрытый
15.2
Число партиций shuffle: spark.sql.shuffle.partitions
↗
0
0
-
0
Закрытый
15.3
Память executors, spill на диск и диагностика OOM
↗
0
0
-
0
Закрытый
15.4
Борьба с перекосом данных: соль и broadcast
↗
0
0
-
0
Закрытый
15.5
Сериализация Kryo, broadcast и лучшие практики
↗
0
0
-
0
Закрытый
15.6
Чтение Spark UI для поиска узких мест
↗
0
0
-
0
16. Модуль 16. Структурированный стриминг
8 уроков
0
0
0м
0
Закрытый
16.1
Идея Structured Streaming: поток как бесконечная таблица
↗
0
0
-
0
Закрытый
16.2
Источники: файлы, сокеты и Kafka
↗
0
0
-
0
Закрытый
16.3
Режимы вывода: append, update, complete
↗
0
0
-
0
Закрытый
16.4
Триггеры и микробатчи
↗
0
0
-
0
Закрытый
16.5
Оконные агрегации по времени события
↗
0
0
-
0
Закрытый
16.6
Watermark и обработка поздних данных
↗
0
0
-
0
Закрытый
16.7
Состояние, checkpoint и отказоустойчивость
↗
0
0
-
0
Закрытый
16.8
Запись в приёмники и foreachBatch
↗
0
0
-
0
17. Модуль 17. Развёртывание и эксплуатация
6 уроков
0
0
0м
0
Закрытый
17.1
spark-submit: ключи и режимы client и cluster
↗
0
0
-
0
Закрытый
17.2
Менеджеры кластера: YARN, Kubernetes, Standalone — обзор
↗
0
0
-
0
Закрытый
17.3
Конфигурация Spark и приоритеты настроек
↗
0
0
-
0
Закрытый
17.4
Сборка приложения и доставка зависимостей на кластер
↗
0
0
-
0
Закрытый
17.5
Мониторинг и логирование в проде. History Server
↗
0
0
-
0
Закрытый
17.6
Отладка падений: типичные ошибки и как их читать
↗
0
0
-
0
18. Модуль 18. Озёра данных и форматы таблиц
3 урока
0
0
0м
0
Закрытый
18.1
Проблемы голого Parquet в озере данных
↗
0
0
-
0
Закрытый
18.2
Delta Lake: ACID, time travel и операция MERGE
↗
0
0
-
0
Закрытый
18.3
Apache Iceberg и Hudi: краткое сравнение
↗
0
0
-
0
19. Модуль 19. Продакшн-практики и тестирование
5 уроков
0
0
0м
0
Закрытый
19.1
Тестирование Spark-приложений: локальная сессия и фикстуры
↗
0
0
-
0
Закрытый
19.2
Качество данных: проверки, ассерты и метрики
↗
0
0
-
0
Закрытый
19.3
Идемпотентность и безопасные перезапуски пайплайнов
↗
0
0
-
0
Закрытый
19.4
Организация кода Spark-проекта: конфиги и параметры
↗
0
0
-
0
Закрытый
19.5
Антипаттерны и чек-лист код-ревью Spark
↗
0
0
-
0
20. Модуль 20. Итоговый проект: end-to-end ETL
5 уроков
0
0
0м
0
Закрытый
20.1
Постановка задачи: пакетный ETL-пайплайн
↗
0
0
-
0
Закрытый
20.2
Слои данных: raw, cleansed, curated (архитектура медальон)
↗
0
0
-
0
Закрытый
20.3
Реализация трансформаций и агрегаций
↗
0
0
-
0
Закрытый
20.4
Тесты, запуск и оптимизация пайплайна
↗
0
0
-
0
Закрытый
20.5
Дорожная карта сеньора дата-инженера: что дальше
↗
0
0
-
0