Выбор ответа Middle Spark обновлено

repartition против coalesce

Вопрос

Перед записью результата в 2000 партиций хотят получить 50 файлов. Что выбрать и почему?

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

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

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

Коротко

Правильный ответ: coalesce(50): склеивает соседние партиции без shuffle, файлы могут быть неравными; иначе repartition(50). coalesce уменьшает число партиций без перемешивания, это дёшево.

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

  1. repartition(50) всегда: coalesce не умеет уменьшать число партиций, только увеличивать его без shuffle
  2. coalesce(50): склеивает соседние партиции без shuffle, файлы могут быть неравными; иначе repartition(50)правильный ответ
  3. coalesce(1), чтобы получить один файл, а затем разбить его на 50 равных частей вручную скриптом после записи
  4. Ничего не делать: Spark при записи сам объединит мелкие партиции ровно в 50 файлов

Разбор

coalesce уменьшает число партиций без перемешивания, это дёшево. Минус: неравномерность и уменьшение параллелизма предыдущих узких преобразований в той же стадии. repartition равномерен, но стоит shuffle. coalesce как раз для уменьшения. coalesce(1) сведёт всю работу к одной задаче. По умолчанию Spark пишет файл на партицию, то есть 2000.

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

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