Tinkerpop & Python - Установка свойства массива с помощью gremlin - PullRequest
0 голосов
/ 05 декабря 2018

Я использую JanusGraph со стандартной привязкой python gremlin, и я хотел бы установить свойство float[] для вершины / ребра.Однако драйвер Tinkerpop для Python , похоже, не в состоянии это сделать.

Например, вот пример со скриптом, работающим непосредственно в Groovy:

val = [1.2, 3.4, 5.6]
_client.submit("g.V(4200).property('a', %s as float[])" % val).all().result()

А вот код, который дает сбой при использовании библиотеки python gremlin:

val = [1.2, 3.4, 5.6]
g.V(4200).property('a', val).next()

Где ошибка:

GremlinServerError: 500: Property value [[1.2, 3.4, 5.6]] is of type class java.util.ArrayList is not supported

Ошибка, вероятно, так как запросы сериализуются в GraphSON с помощьюдрайвер python - и GraphSON поддерживает массивы с элементами разных типов, поэтому код Java за сценой читает значение как java.util.ArrayList, которое действительно не может быть приведено к float[].

Вопрос в том,Есть ли какой-нибудь вменяемый способ сделать это, кроме написания явных строк запроса?

1 Ответ

0 голосов
/ 05 декабря 2018

Эта проблема обсуждалась несколько раз, и JanusGraph - не единственная графовая база данных, в которой есть проблемы с приведением типов.С точки зрения TinkerPop, графы должны либо (1) пытаться привести типы TinkerPop к соответствующему типу, определенному в схеме графа, либо иным образом принятым графом, либо (2) обеспечить дополнительную сериализацию или другую библиотечную поддержку, чтобы эти типы были доступныих пользователи.

Насколько я знаю, для этого нет другого решения, кроме как использовать сценарии, которые вы уже обнаружили.Обратите внимание, что у JanusGraph уже есть открытый выпуск для решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...