我使用python使用networkx构建和可视化广告图。现在的问题是;我不知道我是否可以在spark上使用networkx。我想确认networkx正在进行并行处理。图表应存储在HDFS上,需要查询,结果应该可视化。我应该使用火花库而不是像graphx,尽管graphx我很难并且没有提供可视化因此我更喜欢使用networkx它更容易。感谢
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pylab
# directed graph
G = nx.DiGraph()
# undirected graph G = nx.Graph()
G.add_edges_from([('A', 'B'),('C','D'),('G','D')], weight=1,complementray= 1)
G.add_edges_from([('D','A'),('D','E'),('B','D'),('D','E')], weight=2,complementray= 0)
G.add_edges_from([('B','C'),('E','F')], weight=3,complementray= 1)
G.add_edges_from([('C','F')], weight=4,complementray= 0)
#val_map = {'A': 1.0,
# 'D': 0.5714285714285714,
# 'H': 0.0}
val_map = {'A': 1.0, 'D': 0.5714285714285714, 'H':0.0}
values = [val_map.get(node, 0.45) for node in G.nodes()]
edge_labels=dict([((u,v),d['weight'])
for u,v,d in G.edges(data=True)])
node_labels=dict([(n)
for n in G.nodes(data=True)])
red_edges = [('C','D'),('D','A')]
edge_colors = ['black' if not edge in red_edges else 'red' for edge in G.edges()]
pos=nx.spring_layout(G)
nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)
nx.draw_networkx_labels(G,pos,node_labels=node_labels)
#arrows=True for directed graph without calling the G = nx.DiGraph()
nx.draw(G,pos, node_color = values, node_size=1500,edge_color=edge_colors,edge_cmap=plt.cm.Reds)
pylab.show()
答案 0 :(得分:1)
我在2015年对图库(SNAP vs Igraph vs GraphX)做了一些比较,这是我可以分享的。
如果你想在Spark工作,你最好学习GraphX以利用并行处理。其他只是尝试找到具有更大RAM的机器并使用NetworkX。
我们最终在一个体面的规格桌面(28GB RAM)上使用igraph + SNAP的组合,并进行了一些自定义启发式处理,以便能够处理大约20M节点和300M ++边缘。在那时,可视化网络根本没有任何意义(20M节点......),我们更感兴趣的是分析我们的用户群(telco)中的社区,所以总而言之一切都还可以。我们没有使用GraphX,因为它当时相对较新,并且也没有太多最先进的算法。