为什么 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)
在 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)