Spark Dataframe должен быть перераспределен после фильтра, как RDD? - PullRequest
0 голосов
/ 22 мая 2018

В соответствии с таким количеством хороших ресурсов, желательно переразбить RDD после работы фильтра.поскольку существует вероятность того, что большинство разделов теперь пустые.У меня есть сомнения, что в случае с фреймами данных это обрабатывалось в текущих версиях или нам все еще нужно перераспределять его после операции фильтрации?

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Я предполагаю, что это ваш вопрос.

Должен ли я выполнить операцию фильтра перед перераспределением или после перераспределения?

Исходя из этого предположения, фильтр всегда будет пытаться найти записи, соответствующиенекоторые условия.Таким образом, результирующий кадр данных / RDD всегда либо меньше или равен предыдущему кадру данных / RDD.В большинстве случаев результирующий набор меньше предыдущего.

Принимая во внимание, что перераспределение является одной из самых дорогих операций, поскольку она выполняет случайное перемешивание.Всегда помните, что всякий раз, когда мы выполняем перераспределение, чем меньше данных в памяти, тем лучше производительность, которую мы можем получить из этого.

Мне даже не нужно больше говорить о том, как Spark обрабатывает это и т. Д.В общем, фильтр перед перераспределением хорош для производительности!

Например, сам оптимизатор катализатора использует фильтр до и после для повышения производительности.

Ссылка в блоге:

Например, Spark знает, как и когда делать такие вещи, как объединение фильтров или перемещение фильтров перед объединением.Spark 2.0 даже позволяет вам определять, добавлять и тестировать ваши собственные дополнительные правила оптимизации во время выполнения. 1 [2]

0 голосов
/ 22 мая 2018

Spark не перераспределяет данные автоматически.Было бы неплохо перераспределить данные после фильтрации, если вам нужно выполнить такие операции, как объединение и агрегирование.В зависимости от ваших потребностей вы должны использовать repartition или coalesce.Обычно объединение предпочтительнее, поскольку оно пытается сгруппировать данные без перемешивания, поэтому оно только уменьшает количество разделов.( хорошая ссылка для понимания объединения и перераспределения )

Нет значительного увеличения производительности, если вы не выполняете каких-либо тяжелых вычислений после операции фильтрации.Имейте в виду, что передел сам по себе также может быть дорогим.Вы должны знать свои данные, чтобы принять это решение

0 голосов
/ 22 мая 2018

У меня есть сомнения, что в случае с кадрами данных это обрабатывалось в текущих версиях, или нам все еще нужно перераспределять его после операции фильтрации?

Если вы спросите, Sparkпри автоматическом перераспределении данных ответ будет отрицательным (и я надеюсь, что в будущем он не изменится)

В соответствии с таким большим количеством хороших ресурсов, желательно переразбить СДР после операции фильтрации.с тех пор существует вероятность того, что большинство разделов теперь пустые.

Это действительно зависит от двух факторов:

  • Насколько избирателен фильтр (что ожидаетсячасть записей сохраняется).
  • Каково распределение данных относительно предиката до фильтрации.

Если вы не ожидаете, что предикат удалит большинство данных или предшествующее распределениезначительная часть разделов останется пустой, затраты на перераспределение обычно перевешивают потенциальные выгоды, поэтому основной причиной вызова repartition является ограничение количества выходных файлов.

...