поэтому у меня есть необходимость транслировать некоторый связанный контент с RDD на все рабочие узлы, и я пытаюсь сделать это более эффективно.
Более конкретно, некоторые СДР создаются динамически в середине выполнения, чтобы транслировать часть своего контента на все рабочие узлы, очевидным решением было бы пройти по одному элементу один за другим и создать список / вектор / hashmap для хранения необходимого контента при обходе, а затем передает эту структуру данных в кластер.
Это не кажется хорошим решением вообще, поскольку СДР может быть огромным, и он уже распределен, его обход и создание некоторого массива / списка на основе результата обхода будет очень медленным.
Так что было бы лучшим решением или лучшей практикой для этого случая? Будет ли хорошей идеей запустить SQL-запрос на RDD (после изменения его на dataFrame), чтобы получить необходимый контент, а затем передать результат запроса всем рабочим узлам?
Заранее спасибо за помощь!
После прочтения ответа Варславана добавлено следующее:
СДР создается динамически и имеет следующий контент:
[(1,1), (2,5), (3,5), (4,7), (5,1), (6,3), (7,2), (8,2), (9,3), (10,3), (11,3), ...... ]
, поэтому этот СДР содержит пары ключ-значение. Мы хотим собрать все пары, значение которых> 3. Таким образом, пара (2,5), (3,5), (4,7), ..., будет собрана. Теперь, когда мы собрали все эти пары, мы хотели бы транслировать их, чтобы все рабочие узлы имели эти пары.
Звучит так, как будто мы должны использовать collect()
на СДР и затем передавать ... по крайней мере, это лучшее решение на данный момент.
Еще раз спасибо!