Spark: Как правильно использовать переменную Broadcast? - PullRequest
0 голосов
/ 18 мая 2018

Я не знаю, правильно ли я использую широковещательную переменную.

У меня есть два RDD, rdd1 и rdd2.Я хочу применить rdd2.mapPartitionsWithIndex(...), и для каждого раздела мне нужно выполнить некоторые вычисления, используя целые rdd1.Итак, я думаю, что это случай использования переменной Broadcast. Первый вопрос: Думаю ли я это правильно?

Для этого я сделал следующее:

val rdd1Broadcast =  sc.broadcast(rdd1.collect())  

Второй вопрос: Зачем мне ставить .collect(). Я видел примеры с и без .collect(), но не понял, когда мне нужно его использовать.

ТакжеЯ сделал это:

val rdd3 = rdd2.mapPartitionsWithIndex( myfunction(_, _, rdd1Broadcast), preservesPartitioning = preserves).cache()

Третий вопрос: Что лучше: прохождение rdd1Broadcast или rdd1Broadcast.value?

1 Ответ

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

Я так думаю?

На самом деле недостаточно информации, чтобы ответить на эту часть.Вещание полезно, только если вещаемый объект относительно мал или локальный доступ значительно снижает вычислительную сложность.

Зачем мне нужно ставить .collect ().

Потому что RDDs доступен только на драйвере.Вещание RDD не имеет смысла, так как вы не можете получить доступ к данным из задачи.

Что лучше: передача rdd1Broadcast или rdd1Broadcast.value?

аргумент должен иметь тип Broadcast[_], поэтому не используйте rdd1Broadcast.value.Если параметр передается по значению, он будет оценен и заменен локально, и broadcast не будет использоваться.

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