Как использовали Apache Spark в рабочих процессах?
Что проверяют
Был ли у вас реальный Spark в работе или только курс. Интервьюеру важны масштаб данных, ваша личная роль и понимание, почему нужен именно Spark, а не pandas или SQL в хранилище. Следом обычно просят рассказать про самую неприятную проблему производительности и как вы её нашли.
Как отвечать
Возьмите один проект и пройдите по нему по порядку, со своими цифрами:
- контекст: объём (гигабайты или терабайты в сутки), источники, где работал кластер: YARN, Kubernetes, Databricks или облачный managed-сервис;
- задача: ETL в витрину, сборка признаков для модели, батч-скоринг, стриминг событий;
- инструменты: PySpark, DataFrame API и Spark SQL, Structured Streaming для потока. Если модель обучалась вне Spark, а он только готовил признаки, так и скажите, это частая и нормальная схема;
- оптимизация: формат и партиционирование (Parquet, Delta Lake или Iceberg), broadcast join для маленьких справочников, борьба с перекосом ключей через соль или AQE, который в Spark 3 включён по умолчанию,
cache()только для переиспользуемых датафреймов; - результат: время джобы до и после, стоимость кластера, свежесть данных. Цифры должны быть вашими и объяснимыми.
Если со Spark вы работали мало, не натягивайте опыт. Скажите, на каких объёмах работали с pandas или Polars, где проходит порог, после которого понадобился бы распределённый движок, и что уже попробовали сами: локальный spark-submit, разбор плана через explain() и Spark UI.
Где спотыкаются
Называют круглые проценты вроде «ускорили на 40%». Первый же вопрос «с какого времени на какое и за счёт чего» показывает, что цифра взята с потолка.
Не могут объяснить ленивое исполнение: чем трансформация отличается от действия, где возникает shuffle и почему collect() на большом датафрейме роняет драйвер по памяти.
Пишут логику на Python UDF там, где есть встроенные функции. Каждая строка тогда уходит в Python-процесс и обратно, и джоба замедляется в разы. Встроенные функции из pyspark.sql.functions или pandas UDF на Arrow решают это без переписывания пайплайна.