为什么 Networkx 会占用我所有的内存?

Why is Networkx consuming all my memory?

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

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

谢谢!

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

(我不是 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)