在 python 中使用 pickle 从 Neo4j 转储图表

Dump a Graph from Neo4j with pickle in python

我在 Neo4j 中有一个相当大的图,需要用它做一些计算。这就是我需要在 HPC 集群上执行此操作的原因。到目前为止,一切都很好。但是我的程序多次访问 neo4j 图,这是我在集群上做不到的。这就是为什么我想用 pickle.dump() 转储图形对象的原因。不幸的是我得到一个错误:

File "...myFile.py", line 9, in pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f) AttributeError: Can't pickle local object 'ConnectionPool.connect..'

我的(简化)代码:

import pickle
from py2neo import Graph

graph2 = Graph("bolt:///localhost:7474/", auth=("neo4j", "0000"))

with open('graph.pkl', 'wb') as f:
    pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f)

with open('graph.pkl', 'rb') as f:
    graph = pickle.load(f)

print("Hello")

有人能告诉我,为什么会出现这个错误(以及如何消除它)?非常感谢您。

我猜你会收到这个错误,因为你不仅要转储节点和关系,还要转储图的整个实例 class,包括函数等

我不清楚转储将如何帮助您实现目标。
这个答案看起来很有希望:
这个想法是从您的 Neo4j 数据库创建一个 Python iGraph。 然后可以将其腌制等

你需要做的是实现__getstate____setstate__。有关示例,请参见 here。我认为您必须扩展 Graph 才能实现这些方法。