Это больше относится к обработке графа, чем к фрейму данных. Spark имеет библиотеку graphX, которая может обрабатывать графики. Более или менее вы хотите найти связанные компоненты из структуры графа.
если у вас есть edgeDF, фрейм данных края:
+---+---+
|src|dst|
+---+---+
|1 |2 |
|2 |3 |
|3 |4 |
|7 |8 |
|8 |9 |
+---+---+
и vertexDF как:
+---+
|id |
+---+
|1 |
|2 |
|3 |
|4 |
|7 |
|8 |
|9 |
+---+
и ваш график:
val g = GraphFrame(vertexDF, edgeDF)
чем вы можете запустить подключенные компоненты на нем
val cc = g.connectedComponents.run()
и это даст вам что-то вроде этого:
+---+------------+
|id |component |
+---+------------+
|1 |171798691840|
|2 |171798691840|
|3 |171798691840|
|4 |171798691840|
|7 |807453851648|
|8 |807453851648|
|9 |807453851648|
+---+------------+
Означает, что [1, 2, 3, 4] находятся в одном компоненте. Также [7,8,9] имеют свой собственный компонент