我正在尝试处理具有数亿个节点的超大规模 NetworkX Graph 对象。我希望能够将其写入文件,以免消耗我所有的计算机内存。然而,我需要不断地搜索现有节点、更新边缘等。
对此有好的解决办法吗?我不确定它如何与提供的任何文件格式一起使用http://networkx.lanl.gov/reference/readwrite.html http://networkx.lanl.gov/reference/readwrite.html
我能想到的唯一解决方案是将每个节点存储为一个单独的文件,并引用文件系统中的其他节点 - 这样,打开一个节点进行检查不会使内存过载。是否有一个用于大量数据的现有文件系统(例如 PyTables)可以在不编写我自己的样板代码的情况下执行此操作?
第一次尝试pickle https://docs.python.org/3/library/pickle.html;它旨在序列化任意对象。
创建一个示例DiGraph
并序列化到文件:
import pickle
import networkx as nx
dg = nx.DiGraph()
dg.add_edge('a','b')
dg.add_edge('a','c')
pickle.dump(dg, open('/tmp/graph.txt', 'w'))
加载一个示例DiGraph
来自文件:
import pickle
import networkx as nx
dg = pickle.load(open('/tmp/graph.txt'))
print dg.edges()
Output:
[('a', 'c'), ('a', 'b')]
如果这不够有效,我会编写您自己的例程来进行序列化:
- 边缘和
- 节点(如果节点不与任何边相关)。
请注意,尽可能使用列表推导式可能会更有效(而不是标准的 for 循环)。
If this效率不够,我会从 Python 中调用 C++ 例程:http://docs.python.org/extending/extending.html http://docs.python.org/extending/extending.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)