Запросы обхода гремлина на искровом графе - PullRequest
1 голос
/ 29 мая 2020

Я построил граф свойств (60 миллионов узлов, 40 миллионов ребер) из s3, используя Apache структуру Spark Graphx. Я хочу запустить запросы обхода на этом графике.

Мои запросы будут такими: -

g.V().has("name","xyz").out('parent').out().has('name','abc')
g.V().has('proc_name','serv.exe').out('file_create').
has('file_path',containing('Tsk04.txt')).in().in('parent').values('proc_name')
g.V().has('md5','935ca12348040410e0b2a8215180474e').values('files')

в основном запросы имеют форму g.V().out().out().out()

Такие запросы легко возможны на графических базах данных, таких как neo4j, titan, aws neptune, поскольку они поддерживают гремлин.

Можно ли перемещаться по искровым графам таким образом. Я пробовал spark pregel-api, но это немного сложно по сравнению с gremlin.

Причина, по которой я ищу искровую диаграмму, заключается в том, что облачные решения вышеупомянутых graphdbs являются дорогостоящими.

1 Ответ

3 голосов
/ 29 мая 2020
Библиотека

Spark graphframes должна быть наиболее удобной для вас. он предоставляет описание обхода, подобное neo4j-cypher, и использует api фреймов данных Spark для фильтрации
https://graphframes.github.io/graphframes/docs/_site/user-guide.html#motif -finding Вот пример:

val g2: GraphFrame = GraphFrame.fromGraphX(gx) // you can start with just V and E dataframes here
val motifs: GraphFrame = g.find("(a)-[e]->(b); (b)-[e2]->(c)")
motifs.filter("a.name = 'xyz'  and e.label = 'parent' and c.name = 'abc'").show()

TnokerPop сам имеет поддержку Spark , поэтому вы можете выдавать искровые запросы OLAP из консоли gremlin https://tinkerpop.apache.org/docs/current/reference/#sparkgraphcomputer

Или есть несколько решений с близким исходным кодом. В Datastax Enterprise Database есть хорошая поддержка Gremlin для Spark: https://www.datastax.com/blog/2017/05/introducing-dse-graph-frames Я в прошлом его автор

...