我已经为我使用 NetworkX 在 Python 中构建的图实现了一个未加权的随机游走函数。下面是我处理随机游走的程序片段。在我的程序的其他地方,我有一个创建图形的方法,并且我有一个模拟我编写的各种自定义图形测试方法的方法。其中一种图测试方法从图中随机选择两个节点,并在它们之间运行随机游走。从这个 Random Walk 计算的两件事是命中时间(从起点到终点遍历的链接数)和通勤时间(从起点到终点再回到起点的遍历链接数)。
def unweighted_random_walk(starting_point,ending_point, graph):
'''
starting_point: String that represents the starting point in the graph
ending_point: String that represents the ending point in the graph
graph: A NetworkX Graph object
'''
##Begin the random walk
current_point=starting_point
#current_node=graph[current_point]
current_point_neighors=graph.neighbors(current_point)
hitting_time=0
#Determine the hitting time to get to an arbitrary neighbor of the
#starting point
while current_point!=ending_point:
#pick one of the edges out of the starting_node with equal probs
possible_destination=current_point_neighbors[random.randint(0,current_point_neighors)]
current_point=possible_destination
current_point_neighbors=graph.neighbors(current_point)
hitting_time+=1
return hitting_time
我的随机游走代码非常简单,因为我只是选择随机节点直到到达终点。然而,当我尝试运行几个随机游走时,这个当前的实现非常慢(我想我需要在某个时候运行一百万)。
我的问题是:有什么方法可以使用 Hadoop MapReduce 来并行化此随机游走中正在进行的一些操作?有没有更好的方法让我随机游走?