我正在尝试通过Pyspark在图中找到连接的组件。首先,我用Python定义了自己的图类,并具有诸如addEdge,get_vertices等典型属性。
class Graph:
def __init__(self):
self.graph = defaultdict(set) # default dictionary to store graph
def get_vertices(self):
return(set(self.graph.keys()))
# function to add an edge to graph
def addEdge(self,u,v, bidirection = True):
self.graph[u] |= {v}
if bidirection:
self.graph[v] |= {u} #bidirectional
return self
我不确定人们通常是否会这样工作,但是作为第一步,我决定采用这些边并将其添加到我的图形对象中。为此,我做了类似的事情:
from folder.file import Graph, Tree
data = [(0,1), (1,2),(2,5),(5,8),(7,8),(3,7),(3,4),(3,6)]
rdd = spark.sparkContext.parallelize(graph)
G = Graph()
result = rdd.map(lambda x: G.addEdge(x[0],x[1]))
result.collect()
G.get_vertices()
但是,这似乎不起作用,因为Pyspark似乎复制了G,因此地图实际上在该副本上运行。
#G.get_vertices()
defaultdict(set, {})
如果有人知道什么是错误或我应该怎么做,我将非常感激。