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

Когда broadcast join

Вопрос

Факт заказов на 2 ТБ соединяют со справочником стран на 300 строк. Какая стратегия джойна оптимальна?

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

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

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

Коротко

Правильный ответ: Broadcast hash join: справочник копируется на все executors, большая таблица не перемешивается. Маленькая сторона помещается в память каждого executor, и 2 ТБ не нужно гонять через shuffle.

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

  1. Sort-merge join: обе таблицы перемешиваются по ключу страны и сортируются внутри партиций
  2. Cross join справочника с фактом с последующим фильтром по совпадению кода страны
  3. Broadcast hash join: справочник копируется на все executors, большая таблица не перемешиваетсяправильный ответ
  4. Собрать справочник через collect на driver и соединять в Python-цикле по строкам всех заказов

Разбор

Маленькая сторона помещается в память каждого executor, и 2 ТБ не нужно гонять через shuffle. Spark выбирает это сам, если размер меньше spark.sql.autoBroadcastJoinThreshold (по умолчанию 10 МБ), или по хинту. Sort-merge перемешает 2 ТБ впустую. Cross join взорвёт объём. Python-цикл по терабайту несерьёзен.

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

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