У меня есть график, представленный на следующие файлы:Вставка большого граф данных в Neo4j с использованием py2neo WriteBatch
- VertexLabel.txt -> каждая строка содержит свойство для каждой вершины.
- EdgeLabel.txt -> каждая строка содержит свойства для каждого ребра.
- EdgeID.txt -> каждая строка содержит 3 выделенных целых числа, которые соответствуют индексам в файлах меток: source_index target_index edge_index.
Существует приблизительно 44 К вершин с краями 240 КБ. Я пытаюсь использовать neo4j.Writebatch для вставки данных графа.
from py2neo import Graph, neo4j, node, rel
graph_db = Graph()
nodes = {}
batchNodes = {}
edges = {}
edgeList = []
# Read vertex label file into nodes, where node[i] is indexed according to the order the nodes appear in the file.
# Each entry is of type node, e.g. node("FILM", title = "Star Trek"), node("CAST", name = "William Shatner")
...
# Read edge label file into edges, where edges[i] is indexed according to the order the edges appear in the file.
# Each entry is a tuple (edge_type, edge_task), e.g. ("STAFF", "Director")
...
# Read edge id file into edgeList
# Each entry is the tuple (source_index, target_index, edge_index), e.g. (1, 4, 8)
...
# Iterate nodes, store in graph
# Note, store result of batch.create into batchNodes
batch = neo4j.WriteBatch(graph_db)
count = 0
for n in nodes:
batchNodes[n] = batch.create(nodes[n])
count += 1
# Submit every 500 steps
if count % 500 == 0:
count = 0
batch.submit()
batch = neo4j.WriteBatch(graph_db)
# Submit remaining batch
batch.submit()
# Iterate edgeList, store in graph
batch = neo4j.WriteBatch(graph_db)
count = 0
for i, j, k in edgeList:
# Lookup reference in batchNodes
source = batchNodes[i]
target = batchNodes[j]
edge = edges[k]
batch.create(rel(source, edge[0], target, {"task": edge[1]}))
count += 1
# Submit every 500 steps
if count % 500 == 0:
count = 0
batch.submit()
batch = neo4j.WriteBatch(graph_db)
# Submit remaining batch
batch.submit()
Я получаю следующее сообщение об ошибке:
Traceback (most recent call last): File "test4.py", line 87, in <module>
batch.create(rel(source, edge[0], target, {"task": edge[1]})) File "C:\Python34\lib\site-packages\py2neo\batch\write.py", line 181, in create
start_node = self.resolve(entity.start_node) File "C:\Python34\lib\site-packages\py2neo\batch\core.py", line 374, in resolve
return NodePointer(self.find(node)) File "C:\Python34\lib\site-packages\py2neo\batch\core.py", line 394, in find
raise ValueError("Job not found in batch") ValueError: Job not found in batch
Я полагаю, что batchNodes не на самом деле, содержащая правильную ссылку на узлы, которые я хочу для поиска для добавления отношения (возможно переинициализацией партии объекта недействительным Рекомендации). В этом случае, как мне выполнить эту задачу?
Я использую Neo4j 2.1.7 (Community Edition) и py2neo 2.0.4.
Если информация не в формате CSV, как можно ускорить процесс вставки узлов с использованием пакетной вставки в py2neo? Думаю, в этом и был смысл этого вопроса. – NumenorForLife