как эффективно транслировать контент RDD - PullRequest
0 голосов
/ 15 мая 2018

поэтому у меня есть необходимость транслировать некоторый связанный контент с 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() на СДР и затем передавать ... по крайней мере, это лучшее решение на данный момент.

Еще раз спасибо!

1 Ответ

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

Прежде всего - вам не нужно проходить через СДР, чтобы получить все данные. Для этого есть API - collect().

Второе: широковещательная рассылка отличается от рассылки.

  • В трансляции - у вас есть все данные на каждом узле
  • В распределенном - у вас есть разные части целого на каждом узле

СДР распространяется по своей природе.

В-третьих: для получения необходимого контента вы можете использовать RDD API или преобразовать его в DataFrame и использовать SQL-запросы. Это зависит от данных, которые у вас есть. В любом случае содержимое результата будет RDD или DataFrame, и оно также будет распространено. Так что если вам нужны данные локально - вы collect() это.

Между прочим, из вашего вопроса невозможно понять, что именно вы хотите сделать, и похоже, что вам нужно прочитать основы Spark. Это даст вам много ответов:)

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