我试图在包含1亿个节点的图表中获取已连接组件的列表。对于较小的图形,我通常使用Python中的Networkx模块的connected_components函数来实现这一点。但是,使用此模块将具有1亿个节点(及其边缘)的图形加载到内存中将需要大约1。 110GB的内存,我没有。另一种方法是使用具有连接组件功能的图形数据库,但我在Python中没有找到任何组件。似乎Dex(API:Java,.NET,C ++)具有此功能,但我不是100%肯定。理想情况下,我正在寻找Python的解决方案。非常感谢。
答案 0 :(得分:5)
SciPy有connected components algorithm。它期望在其sparse matrix formats之一中输入图形的邻接矩阵,并处理有向和无向的情况。
从(i, j)
对adj_list
序列构建稀疏邻接矩阵,其中i
和j
是(从零开始)节点索引可以用
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/)。