为什么Networkx消耗了我所有的记忆?

时间:2016-02-16 16:10:44

标签: python-2.7 network-programming social-networking networkx ram

在Python 2.7上使用Networkx,我一直在尝试构建一个大约2M用户和880M边缘的图表。我正在使用包含边缘列表的大约17Gb的文本文件。 我试过使用函数nx.read_edgelist(),但在使用了大约250Gb或ram(我正在远程服务器上工作)之后,我的程序就被杀了。

我的问题是:networkx使用那么多内存是正常的吗?或者我收集数据时犯了错误? 我一直在考虑使用另一个库,我发现iGraph和图形工具看起来非常有效。有人会对此有任何建议吗?

谢谢!

编辑:我的文件实际上包含880M边,而不是88M

1 个答案:

答案 0 :(得分:0)

(我不是100%肯定这一点,但没有其他人回答,所以我会试一试)。

首先,每个边缘保存两次(每个节点一次),因此内存可以快速增长。但是,这可能不是你最大的问题

您的节点名称可能都是整数。但是,如果您没有告诉read_edgelist它们是整数,它们将被视为字符串。与int相比,用于字符串的内存很大。以下是致电read_edgelist

的方法
read_edgelist(path, comments='#', delimiter=None, create_using=None, nodetype=None, data=True, edgetype=None, encoding='utf-8')

如果这是您的问题,可以使用

修复
G=nx.read_edgelist(path, nodetype = int)