Spark DataFrame RangePartitioner - PullRequest
       9

Spark DataFrame RangePartitioner

0 голосов
/ 26 октября 2018

[New to Spark] Язык - Scala

В соответствии с документами RangePartitioner сортирует и разделяет элементы на порции и распределяет порции на разные машины.Как это будет работать для приведенного ниже примера.

Допустим, у нас есть кадр данных с 2 столбцами, а один столбец (скажем, 'A') имеет непрерывные значения от 1 до 1000. Есть другой кадр данных с той же схемой, но соответствующейв столбце есть только 4 значения 30, 250, 500, 900. (Это могут быть любые значения, произвольно выбранные от 1 до 1000)

Если я разделю оба с помощью RangePartitioner,

df_a.partitionByRange($"A")
df_b.partitionByRange($"A")

какБудут ли данные из обоих фреймов данных распределены по узлам?

Предполагая, что количество разделов равно 5.

Кроме того, если я знаю, что второй DataFrame имеет меньшее количество значений, то будет уменьшаться числоразделов для этого имеет какое-либо значение?

Что я пытаюсь понять, так это то, как Spark отображает один раздел df_a на раздел df_b и как он отправляет(если это так) оба этих раздела на одном компьютере для обработки.

1 Ответ

0 голосов
/ 26 октября 2018

Очень подробное объяснение того, как RangePartitioner работает внутри , описывается здесь

В зависимости от вашего вопроса RangePartitioner выполняет выборку СДР во время выполнения , собираетстатистика, и только тогда оцениваются диапазоны (пределы).Обратите внимание, что здесь есть 2 параметра - диапазоны (логические) и разделы (физические).На число разделов могут влиять многие факторы - количество входных файлов, унаследованное число от родительского RDD, 'spark.sql.shuffle.partitions' в случае тасования и т. Д. Диапазон оценивается в соответствии с выборкой.В любом случае RangePartitioner гарантирует, что каждый диапазон содержится в одном разделе.

как данные с обоих кадров будут распределены по узлам?как Spark отображает один раздел df_a на раздел df_b

Я предполагаю, что вы подразумеваете, что вы подразумеваете объединение 'A' и 'B', в противном случае вопрос не имеет никакого смысла.В этом случае Spark обязательно сопоставит разделы с диапазонами в обоих DataFrames согласно их статистике.

...