Big Data
Spark MLlib и распределённое обучение ML
Spotify обновляет рекомендательную модель для 600 миллионов пользователей каждые несколько часов. Данные о прослушиваниях за день - 150 терабайт. Без Spark это заняло бы недели вместо часов. Feature engineering, обучение, оценка - весь ML pipeline запускается на кластере автоматически.
- Uber: surge pricing через Spark MLlib на 20 миллиардах trip records с ретрейном каждые 4 часа
- LinkedIn: Job Recommendations через Gradient Boosted Trees на 900 миллионах профилей
- AirBnb: fraud detection на Spark, обнаружение мошеннических объявлений в реальном времени
- Netflix: матричная факторизация ALS на 300 миллионах user-item взаимодействий
Распределённое обучение: почему одна машина не справляется
2015 год. Netflix запускает рекомендательную систему на 50 миллионах пользователей. Одна машина: 48 часов обучения. Кластер на 200 нод Spark: 45 минут. Разница в 64 раза. При обновлении модели раз в час - разница между "работает" и "невозможно".
**Spark MLlib** - библиотека машинного обучения поверх Spark, работающая на распределённых данных. Данные хранятся как DataFrame, алгоритмы работают на партициях параллельно. Ключевые алгоритмы: линейные модели (LR, SVM), деревья (Random Forest, GBT), кластеризация (K-Means), рекомендации (ALS).
**Parameter Server vs All-Reduce.** Spark MLlib использует parameter server паттерн: один worker держит веса, остальные присылают градиенты. PyTorch Distributed (для DNN) использует all-reduce через NCCL: каждый worker держит копию весов, градиенты усредняются по ring. All-reduce быстрее для DNN, parameter server - для sparse моделей (рекомендации).
Почему Spark MLlib подходит для обучения на терабайтах данных?
Feature Engineering на Spark: масштаб меняет правила
На одной машине можно написать `df['feature'] = np.log1p(df['raw'])`. На 10 миллиардах строк эта строка превращается в распределённую трансформацию на 200 нодах. Но это не главная проблема. Главная - **data leakage**: статистики для нормализации нельзя считать на всём датасете, если часть его - тест. Spark Pipeline решает обе проблемы.
**Imbalanced datasets на Spark.** Когда класс 1% от данных, модель учится предсказывать 0 всегда. Решение: `oversampling` через `sampleBy` или `undersampling` majority class. Для Random Forest - `classWeightCol`. SMOTE (синтетические примеры) на Spark - через custom UDF или библиотеку `imbalanced-learn` с SparkContext.
Почему нужно разбивать данные на train/test до применения StandardScaler?
ML Pipeline: от фич до продакшна
**Spark ML Pipeline** - это не просто последовательность шагов. Это воспроизводимый артефакт: обученный pipeline можно сохранить, загрузить, применить к новым данным с теми же параметрами нормализации. Uber обучал ML модели для surge pricing через Spark Pipeline - артефакты хранились в S3, версионировались как код.
Что означает параметр parallelism=4 в CrossValidator?
Оценка моделей: метрики, мониторинг и model drift
**Метрики - это не только AUC.** В продакшне важно: калибровка вероятностей (Platt scaling), метрики на подгруппах (fairness), и drift detection. AUC 0.9 в 2023 году на новых данных 2024 года может стать 0.7 - если распределение изменилось. Это **model drift**.
**Model Registry** - следующий уровень после обученного артефакта. MLflow (Databricks) или Vertex AI Model Registry хранят версии моделей, метрики, параметры, артефакты. Promotion workflow: Staging → Production → Archived. A/B testing между версиями на Spark через `randomSplit` или feature flags.
Высокий AUC на тестовой выборке гарантирует хорошую работу в продакшне
Тестовая выборка из того же временного периода что тренировка - оптимистичная оценка. В продакшне распределение данных меняется.
Правильная оценка: temporal split (тест из будущего относительно трейна) + мониторинг метрик после деплоя. Если train: Jan-Nov, test: Dec - более реалистичная оценка.
Что такое model drift и как его обнаружить?
Ключевые идеи
- Spark MLlib: ML алгоритмы на distributed DataFrame - данные на кластере, вычисления параллельны
- Pipeline: цепочка Transformer → Estimator, артефакт можно сохранить и воспроизвести
- Data leakage: train/test split перед любыми fitted трансформациями (scaler, encoder)
- Cross-validation: parallelism=N обучает N моделей одновременно при grid search
- Model drift: AUC деградирует со временем из-за смещения данных - мониторинг обязателен
Связанные темы
Distributed ML строится поверх Spark core и ведёт к feature stores.
- Spark DataFrame и RDD — MLlib DataFrame API - поверх Spark SQL вычислений
- Spark SQL и трансформации — Feature engineering через Spark SQL аналогичен ML трансформациям
- Feature Store — Следующий уровень - централизованное управление фичами
Вопросы для размышления
- Чем Spark MLlib отличается от sklearn? Когда выбрать один, а когда другой?
- Как реализовать online learning (обновление модели на потоке) поверх Spark Streaming?
- Что такое Population Stability Index (PSI) и почему он лучше KS test для мониторинга drift в продакшне?
Связанные уроки
- bd-04 — Spark RDD и DataFrame - фундамент для MLlib API
- bd-05 — Spark SQL и трансформации нужны для feature engineering
- bd-06 — Flink streaming - для online feature computation
- bd-16 — Feature Store как следующий уровень управления фичами
- arch-15-gpu-architecture — GPU accelerated Spark ML через RAPIDS cuML
- ml-54-distributed-training