Этот вопрос касается Spark GraphX. Имея произвольный граф, я хочу вычислить новый граф, который добавляет ребра между любыми двумя узлами v, w, на которые указывает некоторый узел x. Новые ребра должны содержать указывающий узел в качестве атрибута.
То есть по данным ребрам (x, v, nil) и (x, w, nil) вычисляются ребра (v, w, x) и (w, v, x).
Это должно работать для любого графа и не требует, чтобы я знал что-либо о графе заранее, например, идентификаторы вершин.
Пример
[Задача] Добавить два направленных ребра между узлами (например, A, C), если на них указывает один и тот же узел (например, B).
Входной график:
┌────┐
┌─────│ B │──────┐
│ └────┘ │
v v
┌────┐ ┌────┐
│ A │ │ C │
└────┘ └────┘
^ ^
│ ┌────┐ │
└─────│ D │──────┘
└────┘
Выходной граф (двунаправленные ребра = два направленных ребра):
┌────┐
┌─────│ B │──────┐
│ └────┘ │
v v
┌────┐<───by B───>┌────┐
│ A │ │ C │
└────┘<───by D───>└────┘
^ ^
│ ┌────┐ │
└─────│ D │──────┘
└────┘
Как элегантно написать запрос GraphX, который возвращает выходной график?
graph.edges.flatMap
и для каждого ребра просто создать новое на его основе. Это в основном все, что вы делаете. - person David Griffin   schedule 20.05.2015