График обнаружения цикла с помощью Spark (или любого параллельного алгоритма)? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть проблема, когда я должен принять большой поток данных, где каждый элемент - это человек с одним или несколькими идентификаторами.Смысл потребления состоит в том, чтобы найти людей с общими идентификаторами и объединить их как одно и то же.Это может привести к длинным цепям людей, связанных в одну.В основном это все о поиске связанных компонентов гигантского набора вершин.Теперь проблема в том, что, хотя я знаю, как сделать это с хранилищем, где я могу выполнять итеративный запрос, обрабатывая исходные элементы один за другим и постепенно объединяя их вместе, я хотел сделать это в Spark.

Проблема в том, что я могу думать только об итеративном решении проблемы, которое включает обработку данных в проходах.

Так что для каждого прохода я буду:

  • группировать людей по одинаковым атрибутам
  • , если ни одна группа не имеет размер> 1 стоп, в противном случае
  • объединитьих в одном человеке, повторите с начала

Теперь количество проходов полностью зависит от данных.На самом деле:

P1 a1 a2
P2 a2 a3
P3 a3 a4
...
P10000 a10000 a1

В этом случае ожидаемый результат будет (потому что они все связаны):

P1 a1 a2 a3 ... a10000

, если у меня есть схема выше, где P является личностью, атрибутом , это приведет к .... может быть, log (N) проходит, поскольку он присоединяется к ним, непрерывно вдвое сокращая количество людей и в конечном итоге соединяя последнее с первым?Есть ли способ решить эту проблему параллельно и быстрее?

...