Выбор ответа Junior Spark спрашивают часто обновлено
Ленивые вычисления в Spark
Вопрос
Код выполнил df2 = df.filter(...).select(...) мгновенно, хотя данных терабайт. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Преобразования ленивые: строится только план, а вычисление начнётся при count или write. Transformations только описывают вычисление, и оптимизатор видит весь план целиком перед запуском.
Варианты ответа
- Spark при старте сессии закешировал терабайт в памяти executors, и фильтр прошёл по кешу
- Фильтр и select выполняются на driver по метаданным файлов, поэтому почти мгновенно
- Spark выполнил фильтр по индексу Parquet и прочитал только подходящие строки за доли секунды
- Преобразования ленивые: строится только план, а вычисление начнётся при
countилиwriteправильный ответ
Разбор
Transformations только описывают вычисление, и оптимизатор видит весь план целиком перед запуском. Работа начинается, когда вызывается action. Кеширования заранее не было. Driver не обрабатывает данные, он планирует. Индексов в обычном смысле у файлов нет, хотя статистики Parquet помогают пропускать блоки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.