import os
import graphscope
from graphscope.framework.graph import Graph
from graphscope.framework.loader import Loader
import vineyard
k8s_volumes = {
"data": {
"type": "hostPath",
"field": {
"path": "/testingdata/modern_graph_2", # Path in host
"type": "Directory"
},
"mounts": {
"mountPath": "/home/jovyan/datasets/modern_graph_2", # Path in pods
"readOnly": True
}
}
}
graphscope.set_option(show_log=True) # enable logging
session = graphscope.session(k8s_volumes=k8s_volumes) # create a session
modern_graph = session.g()
modern_graph = modern_graph.add_vertices(
Loader("/home/jovyan/datasets/modern_graph_2/person.csv", delimiter="|"),
label="person"
)
modern_graph = modern_graph.add_vertices(
Loader("/home/jovyan/datasets/modern_graph_2/software.csv", delimiter="|"),
label="software"
)
modern_graph = modern_graph.add_edges(
Loader("/home/jovyan/datasets/modern_graph_2/knows.csv", delimiter="|"),
label="knows", src_label="person", dst_label="person"
)
modern_graph = modern_graph.add_edges(
Loader("/home/jovyan/datasets/modern_graph_2/created.csv", delimiter="|"),
label="created", src_label="person", dst_label="software"
)
interactive = session.gremlin(modern_graph)
两点之间的遍历是图数据领域十分常见的查询场景。例如,为了搞清楚v1和v2/v3之间的关系,我们可以这样写一条 gremlin 语句:
q1 = interactive.execute("g.V().has(\"id\", 1).as(\"u\").out().has(\"id\", eq(2).or(eq(3))).as(\"v\").select(\"u\", \"v\").by(\"id\")")
for p in q1:
print(p)
接下来展示一条在社交网络场景中常用的查询,例如如何找到两个不同用户之间的共同特点,用户1昵称为"marko",另一个为"peter"。
q2 = interactive.execute("g.V().has(\"name\", \"marko\").out().where(__.in().has(\"name\", \"peter\")).valueMap()")
for p in q2:
print(p)
度的中心性是衡量每个顶点邻接边数量的指标,在处理大数据时有重要意义,这里有一些示例:
q3 = interactive.execute("g.V().group().by().by(bothE().count())")
for p in q3:
print(p[0])
q4 = interactive.execute("g.V().group().by().by(inE().count())")
for p in q4:
print(p[0])
环的检测是图查询在商业领域中的另一重要应用,环通常被认为是欺诈行为的发生。这里有一个示例展示 gremlin 如何被用于发现图上的环。
q5 = interactive.execute("g.V().as(\"u\").repeat(out().simplePath()).times(2).where(out().where(eq(\"u\"))).count()")
print(q5.one())
session.close()