Выбор ответа Middle Spark обновлено
repartition против coalesce
Вопрос
Перед записью результата в 2000 партиций хотят получить 50 файлов. Что выбрать и почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: coalesce(50): склеивает соседние партиции без shuffle, файлы могут быть неравными; иначе repartition(50). coalesce уменьшает число партиций без перемешивания, это дёшево.
Варианты ответа
repartition(50)всегда:coalesceне умеет уменьшать число партиций, только увеличивать его без shufflecoalesce(50): склеивает соседние партиции без shuffle, файлы могут быть неравными; иначеrepartition(50)правильный ответcoalesce(1), чтобы получить один файл, а затем разбить его на 50 равных частей вручную скриптом после записи- Ничего не делать: Spark при записи сам объединит мелкие партиции ровно в 50 файлов
Разбор
coalesce уменьшает число партиций без перемешивания, это дёшево. Минус: неравномерность и уменьшение параллелизма предыдущих узких преобразований в той же стадии. repartition равномерен, но стоит shuffle. coalesce как раз для уменьшения. coalesce(1) сведёт всю работу к одной задаче. По умолчанию Spark пишет файл на партицию, то есть 2000.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.