Есть два вопроса:
Правильно ли использовать collect () для вещания ??
all_neighbors
имеет тип VertexRDD, который по сути является СДР , В RDD нет ничего, что вы могли бы транслировать. RDD - это структура данных, которая описывает распределенные вычисления для некоторых наборов данных. По функциям RDD вы можете описать, что и как вычислять. Это абстрактная сущность. Вы можете транслировать только реальное значение, но СДР - это просто контейнер значений, которые доступны только тогда, когда исполнители обрабатывают свои данные.
цитирование из Broadcast Variables :
Широковещательные переменные позволяют программисту хранить переменную только для чтения в кэше на каждом компьютере, а не отправлять ее копию с задачами. Их можно использовать, например, для эффективного предоставления каждому узлу копии большого входного набора данных.
Это означает, что явное создание широковещательных переменных полезно только в том случае, когда задачам на нескольких этапах требуются одинаковые данные или когда кэширование данных в десериализованной форме имеет важное значение.
По этой причине нам нужно выполнить collect
набор данных, который хранится в RDD, который преобразует RDD в локально доступную коллекцию, которую затем можно транслировать.
Примечание. При выполнении операции collect
данные накапливаются в узле драйвера и затем транслируются. Так что, если места в узле драйвера меньше, он выдаст ошибки
. Передается ли вышеуказанный код (я имею в виду nvalues) всем ведомым в кластере ?? я тоже должен транслировать nvalues ??
Это полностью зависит от вашего варианта использования. Если вы хотите использовать только broadcastVar
, то только транслировать его или если вы хотите использовать nvalues
, только широковещание nvalues
, иначе вы можете транслировать оба значения, хотя вам нужно быть осторожным с ограничениями памяти.
Дайте мне знать, если это поможет !!