我使用python构建和可视化networkx广告图。现在的问题是,我不知道是否可以在spark上应用networkx。我想确认networkx是并行处理。图形存储在HDFS上,需要查询,结果可视化。我是否应该像graphx那样使用spark库,尽管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()
我在2015年对图形库(SNAP vs Igraph vs GraphX)做了一些比较,这是我可以分享的。在
如果您想在Spark中工作,最好学习GraphX来利用并行处理。否则,只需尝试找到一台内存更大的机器并使用NetworkX。在
我们最终在一个像样的桌面(28gbram)上使用了igraph+SNAP的组合,并制作了一些定制的启发式算法来处理大约20M节点和300M++边缘。在那一点上,网络的可视化根本没有任何意义(20M个节点….),我们更感兴趣的是分析我们的用户群(telco)内的社区,所以总的来说一切都没问题。我们没有使用GraphX,因为它在那个时候相对较新,也没有多少最先进的算法可用。在
相关问题 更多 >
编程相关推荐