我试图在非常大的有向图数据集中找到闭环,并希望通过PySpark在Spark中实现。对于其他图形分析,我已经在使用图形框架,但是我不知道如何实现属于电路的顶点/边的提取和标记。 有人已经在Spark中大规模实施了这样的问题吗?
使用python模块networkx可以轻松实现该问题,并且看起来像
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
# cycles
nx.add_cycle(G,[1,2,3,4]) # cycle 1
nx.add_cycle(G,[5,6,7,8]) # cycle 2
G.add_edge(6,8) # nested cycle 3
G.add_edge(11,11) # self loop 4
# some connections between
G.add_edge(0,1)
G.add_edge(4,5)
G.add_edge(8,9)
G.add_edge(9,10)
G.add_edge(9,11)
print(list(nx.simple_cycles(G)))
nx.draw(G, with_labels=True, font_weight='bold')
这将导致以下结果
[[11], [1, 2, 3, 4], [8, 5, 6], [8, 5, 6, 7]]
显示所有4个周期 image of this graph with cycles
如何实现此功能,使其可以在Spark上扩展? 其余的数据转换是在Python中使用Spark SQL /数据框和图形框实现的