Выбор ответа Junior Spark спрашивают часто обновлено

Ленивые вычисления в Spark

Вопрос

Код выполнил df2 = df.filter(...).select(...) мгновенно, хотя данных терабайт. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Преобразования ленивые: строится только план, а вычисление начнётся при count или write. Transformations только описывают вычисление, и оптимизатор видит весь план целиком перед запуском.

Варианты ответа

  1. Spark при старте сессии закешировал терабайт в памяти executors, и фильтр прошёл по кешу
  2. Фильтр и select выполняются на driver по метаданным файлов, поэтому почти мгновенно
  3. Spark выполнил фильтр по индексу Parquet и прочитал только подходящие строки за доли секунды
  4. Преобразования ленивые: строится только план, а вычисление начнётся при count или writeправильный ответ

Разбор

Transformations только описывают вычисление, и оптимизатор видит весь план целиком перед запуском. Работа начинается, когда вызывается action. Кеширования заранее не было. Driver не обрабатывает данные, он планирует. Индексов в обычном смысле у файлов нет, хотя статистики Parquet помогают пропускать блоки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.