Ошибка индекса Py2neo: индекс вне диапазона на графике.выполняется с помощью gds.alpha.allShortestPaths.stream

#python-3.x #neo4j #py2neo #graph-data-science

Вопрос:

Я пытаюсь запустить gds.alpha.allShortestPaths.stream py2neo.Graph экземпляр

Это мой код:

 cypherCode = """CALL gds.alpha.allShortestPaths.stream({
nodeQuery: 'MATCH (n:AUTHOR) RETURN id(n) AS id',
relationshipQuery: 'MATCH (n:AUTHOR)-[r:COAUTHORS]-(p:AUTHOR) RETURN id(n) AS source, id(p) AS target'
})
YIELD sourceNodeId, targetNodeId, distance
return sourceNodeId, targetNodeId, distance
"""
r = graph.run(cypherCode)
 

Я использую relationshipQuery: 'MATCH (n:AUTHOR)-[r:COAUTHORS]-(p:AUTHOR) RETURN id(n) AS source, id(p) AS target' , потому что мне нужны неориентированные пути.

Через 60 секунд я получаю эту ошибку:

 IndexError: index out of range
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<timed exec> in <module>

~/.local/lib/python3.8/site-packages/py2neo/database.py in run(self, cypher, parameters, **kwparameters)
    403         :return:
    404         """
--> 405         return self.auto().run(cypher, parameters, **kwparameters)
    406 
    407     def evaluate(self, cypher, parameters=None, **kwparameters):

~/.local/lib/python3.8/site-packages/py2neo/database.py in run(self, cypher, parameters, **kwparameters)
    976                 result = self._connector.run(self.ref, cypher, parameters)
    977             else:
--> 978                 result = self._connector.auto_run(cypher, parameters,
    979                                                   graph_name=self.graph.name,
    980                                                   readonly=self.readonly)

~/.local/lib/python3.8/site-packages/py2neo/client/__init__.py in auto_run(self, cypher, parameters, pull, graph_name, readonly)
   1341             if pull != 0:
   1342                 try:
-> 1343                     cx.pull(result, n=pull)
   1344                 except TypeError:
   1345                     # If the RUN fails, so will the PULL, due to

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in pull(self, result, n, capacity)
    941         result.append(response, final=(n == -1))
    942         try:
--> 943             self._sync(response)
    944         except BrokenWireError as error:
    945             result.transaction.mark_broken()

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in _sync(self, *responses)
    745         self.send()
    746         for response in responses:
--> 747             self._wait(response)
    748 
    749     def _audit(self, task):

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in _wait(self, response)
    740         """
    741         while not response.full() and not response.done():
--> 742             self._fetch()
    743 
    744     def _sync(self, *responses):

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in _fetch(self)
    715         failed state into an exception.
    716         """
--> 717         tag, fields = self.read_message()
    718         if tag == 0x70:
    719             self._responses.popleft().set_success(**fields[0])

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in read_message(self)
    642 
    643     def read_message(self):
--> 644         tag, fields = self._reader.read_message()
    645         if tag == 0x71:
    646             # If a RECORD is received, check for more records

~/.local/lib/python3.8/site-packages/py2neo/client/bolt.py in read_message(self)
     94                 chunks.append(self.wire.read(size))
     95         message = b"".join(chunks)
---> 96         _, n = divmod(message[0], 0x10)
     97         try:
     98             unpacker = UnpackStream(message, offset=2)

IndexError: index out of range
 

Когда я пытаюсь изменить relationshipQuery ориентированный путь или с помощью небольшого графика, это работает нормально.

Запуск этого кода шифрования непосредственно в браузере neo4j работает и занимает около 80 секунд для запуска.

На моем графике 10 тысяч узлов и 20 тысяч отношений.

Комментарии:

1. Если он работает с браузером Neo4j, а не py2neo, я бы предложил создать проблему в github.com/py2neo-org/py2neo