Spark Dataframe Join shuffle - PullRequest
       9

Spark Dataframe Join shuffle

0 голосов
/ 14 июня 2019

Spark версия 1.6.0

Я использую функцию соединения между двумя фреймами данных, которые имеют 100 разделов, приложение работает в кластере, где я использую 5 ядер длякаждый 20 исполнитель с общим количеством ядер 100

1006 * Моя проблема в том, что когда я выполняю объединение, все записи вычисляются для одного исполнителя, в то время как другие исполнители не используются, как показано ниже: enter image description here

Это приводит к снижению производительности, поскольку все данные рассчитываются с одним исполнителем по сравнению с другими 19 доступными исполнителями.

Похоже, что объединение свечей "сводит" всю запись только в одномразделы, есть ли способ избежать этого?

Чтобы быть уверенным, что он не переназначен на 1, я также установил это свойство spark: spark.sql.shuffle.partitions=100 действительно, два входных фрейма данных имеют 100 разделов, таких же, как выходной фрейм данных

1 Ответ

1 голос
/ 14 июня 2019

Краткий ответ:

Это из-за ваших данных, а не из-за искры.

Длинный ответ:

Чтобы выполнить join операцию искры, нужноперемещать данные с одинаковыми ключами (значениями столбцов, к которым вы присоединяетесь) к одним и тем же рабочим.Например, если вы объедините столбец A со столбцом B, строки, содержащие одинаковые значения в обеих таблицах, будут перемещены к одним и тем же рабочим, а затем объединены.

Кроме того, строки с разными ключами также могут быть перемещены на один и тот же узел - этозависит от Partitioner, который у вас есть.Вы можете прочитать больше здесь - но общая идея, что существуют разделители по умолчанию - HashPartitioner и RangePartitioner.Независимо от того, какой из них используется - он решает, какой рабочий ряд идет.Как пример - если у вас есть RangePartitioner с диапазонами [0, 5) [5.7) [7, 10], тогда ключи 1, 2, 3, 4 все перейдут к одному и тому же работнику.И если у вас есть только эти ключи в ваших данных - будет использоваться только один работник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...