1

在Python 2.7上使用Networkx,我一直在試圖建立一個約2M用戶和880M邊緣的圖。我正在使用包含邊緣列表的大約17Gb的文本文件。 我試過使用函數nx.read_edgelist(),但使用大約250Gb或RAM(我正在遠程服務器上工作)後,我的程序被殺害。爲什麼Networkx會佔用我所有的內存?

我的問題是:networkx使用那麼多內存是否正常?或者,也許我收集數據時出錯了? 我一直在考慮使用另一個庫,我發現這兩個iGraph和圖形工具看起來非常有效。有人會有任何建議嗎?

謝謝!

編輯:我的文件實際上包含880M的邊緣,而不是88M

+0

科拉斯嗨固定 - 我給了一個答案,但不是100%肯定它是正確的。通常我會使用評論,但這太長了。如果解決這個問題(或不解決問題),請讓我知道,以便我可以適當地編輯/刪除我的答案。 – Joel

+0

您好,Joel,非常感謝您的回答! 我目前正在嘗試你的解決方案,當然我會讓你更新(計算通常需要很長時間,我可能會在星期一給你一個結果)。 然而,我應該糾正我自己的問題:我實際上處理880M邊緣(我在閱讀時跳過了0),這可能解釋我的困難... –

回答

0

(我不是100%肯定這一點,但沒有其他人已經回答了,所以我給它一個GO)。

首先,每個邊緣被保存兩次(每個節點一次),因此內存可以快速增長。但是,這可能不是你最大的問題

它很可能是你的節點名稱都是整數。但是,如果您沒有告知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) 
+0

非常感謝您的答案,但不幸的是,這並沒有解決問題(我的圖形對象仍然使用超過250GB的數據)。我認爲實際上沒有圖書館能夠處理這樣一個巨大的圖表,因此我將直接處理邊界列表,大多數操作仍然可能以這種方式進行,儘管更復雜。 –

相關問題