Выбор ответа Middle Spark спрашивают часто обновлено
Когда broadcast join
Вопрос
Факт заказов на 2 ТБ соединяют со справочником стран на 300 строк. Какая стратегия джойна оптимальна?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Broadcast hash join: справочник копируется на все executors, большая таблица не перемешивается. Маленькая сторона помещается в память каждого executor, и 2 ТБ не нужно гонять через shuffle.
Варианты ответа
- Sort-merge join: обе таблицы перемешиваются по ключу страны и сортируются внутри партиций
- Cross join справочника с фактом с последующим фильтром по совпадению кода страны
- Broadcast hash join: справочник копируется на все executors, большая таблица не перемешиваетсяправильный ответ
- Собрать справочник через collect на driver и соединять в Python-цикле по строкам всех заказов
Разбор
Маленькая сторона помещается в память каждого executor, и 2 ТБ не нужно гонять через shuffle. Spark выбирает это сам, если размер меньше spark.sql.autoBroadcastJoinThreshold (по умолчанию 10 МБ), или по хинту. Sort-merge перемешает 2 ТБ впустую. Cross join взорвёт объём. Python-цикл по терабайту несерьёзен.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.