У меня есть проблема, когда я должен принять большой поток данных, где каждый элемент - это человек с одним или несколькими идентификаторами.Смысл потребления состоит в том, чтобы найти людей с общими идентификаторами и объединить их как одно и то же.Это может привести к длинным цепям людей, связанных в одну.В основном это все о поиске связанных компонентов гигантского набора вершин.Теперь проблема в том, что, хотя я знаю, как сделать это с хранилищем, где я могу выполнять итеративный запрос, обрабатывая исходные элементы один за другим и постепенно объединяя их вместе, я хотел сделать это в Spark.
Проблема в том, что я могу думать только об итеративном решении проблемы, которое включает обработку данных в проходах.
Так что для каждого прохода я буду:
- группировать людей по одинаковым атрибутам
- , если ни одна группа не имеет размер> 1 стоп, в противном случае
- объединитьих в одном человеке, повторите с начала
Теперь количество проходов полностью зависит от данных.На самом деле:
P1 a1 a2
P2 a2 a3
P3 a3 a4
...
P10000 a10000 a1
В этом случае ожидаемый результат будет (потому что они все связаны):
P1 a1 a2 a3 ... a10000
, если у меня есть схема выше, где P является личностью, атрибутом , это приведет к .... может быть, log (N) проходит, поскольку он присоединяется к ним, непрерывно вдвое сокращая количество людей и в конечном итоге соединяя последнее с первым?Есть ли способ решить эту проблему параллельно и быстрее?