图形中的组件连接有1亿个节点

时间:2012-06-13 13:48:03

标签: python graph

我试图在包含1亿个节点的图表中获取已连接组件的列表。对于较小的图形,我通常使用Python中的Networkx模块的connected_components函数来实现这一点。但是,使用此模块将具有1亿个节点(及其边缘)的图形加载到内存中将需要大约1。 110GB的内存,我没有。另一种方法是使用具有连接组件功能的图形数据库,但我在Python中没有找到任何组件。似乎Dex(API:Java,.NET,C ++)具有此功能,但我不是100%肯定。理想情况下,我正在寻找Python的解决方案。非常感谢。

2 个答案:

答案 0 :(得分:5)

SciPy有connected components algorithm。它期望在其sparse matrix formats之一中输入图形的邻接矩阵,并处理有向和无向的情况。

(i, j)adj_list序列构建稀疏邻接矩阵,其中ij是(从零开始)节点索引可以用

i_indices, j_indices = zip(*adj_list)
adj_matrix = scipy.sparse.coo_matrix((np.ones(number_of_nodes),
                                     (i_indices, j_indices)))

你必须为无向的情况做一些额外的工作。

如果你的图表足够稀疏,这种方法应该是有效的。

答案 1 :(得分:3)

https://graph-tool.skewed.de/performance

从性能上可以看出这个工具非常快。它是用C ++编写的,但界面是用Python编写的。

如果这个工具对你不够好。 (我认为它会)然后你可以尝试Apache Giraph(http://giraph.apache.org/)。