Стратегии джойнов в Spark
Вопрос
Расскажите, какие стратегии джойна есть в Spark, как он выбирает между ними и как вы можете на это повлиять.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Broadcast hash join: маленькая сторона на каждый executor, без shuffle большой
Sort-merge join: shuffle и сортировка обеих сторон, для двух больших таблиц
Shuffle hash join как промежуточный вариант
Выбор по статистике и порогу autoBroadcastJoinThreshold, AQE во время выполнения
Хинты broadcast, merge, бакетинг таблиц по ключу
Подготовка: фильтры и отбор колонок до джойна, борьба с перекосом
Что могут спросить следом
- Почему broadcast может уронить executors?
- Что даёт бакетинг для джойнов?
Разбор
Образцовый ответ: «Основные стратегии три. Broadcast hash join: маленькая таблица собирается и рассылается на все executors, большая читается без shuffle, это самое быстрое, пока маленькая сторона действительно маленькая. Sort-merge join: обе стороны перемешиваются по ключу и сортируются, это стандарт для двух больших таблиц. Shuffle hash join строит хеш-таблицу по меньшей стороне в каждой партиции. Spark выбирает по оценке размера: если сторона меньше autoBroadcastJoinThreshold, по умолчанию 10 мегабайт, берёт broadcast; AQE может переключиться на broadcast уже после того, как узнал реальный размер. Повлиять можно хинтами, порогом, а для повторяющихся джойнов больших таблиц бакетингом по ключу, тогда shuffle не нужен. И главное: до джойна отфильтровать строки и отобрать колонки, а перекошенные ключи обработать отдельно. Broadcast слишком большой таблицы опасен: она не влезет в память driver или executors».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.