我想过滤我的图,使其仅包括边缘数量少于阈值(例如50)的顶点,如下所示:
<ul class="navbar-nav ml-auto">
<li>
<a class="nav-link" href="#showcase"
data-toggle="collapse" data-target=".navbar-collapse.show">Home</a>
</li>
<li>
<a class="nav-link" href="#features" data-toggle="collapse"
data-target=".navbar-collapse.show">Feature</a>
</li>
<li>
<a class="nav-link" href="#teams" data-toggle="collapse" data-target=".navbar-collapse.show">Team</a>
</li>
<li>
<a class="nav-link" href="#contact" data-toggle="collapse"
data-target=".navbar-collapse.show">Contact</a>
</li>
</ul>
这给了我要保留的顶点列表。
如何创建仅包含这些顶点的g.V().filter(bothE().limit(50).count().is(lt(50)))
对象?
背景
我需要计算图形中每个顶点的k跳邻域,以滤除具有大量边(例如<50)的顶点。过滤后的图具有数百万个边和顶点。
想到的第一种方法是首先过滤图形,将结果存储为新的子图,然后遍历每个顶点以查找k跳邻域。对于单个顶点traversal
,k = 5跳邻域代码为:
v
更好的方法可能是迭代原始未过滤图中的每个顶点,并忽略附加到高边数顶点的边,但是我不确定如何做到这一点。
尝试1:
g.V(v).repeat(__.bothE().bothV()).times(5).dedup().toList()
不幸的是,使用filtered_edges = g.V().filter(bothE().limit(50).count().is_(lt(50))).outE().toList()
subgraph = g.E(filtered_edges).subgraph('subGraph').cap('subGraph').next()
时会引发错误(gremlinpython
)。在出现此错误之前和之后运行其他(可能更便宜)的查询不会产生类似的错误,因此仍然存在与gremlin shell的连接。该代码也可以在gremlin shell中工作(将StreamClosedError: Stream is closed
替换为is_
)。
我想这是因为我在gremlin服务器和Python之间发送了这么多数据,但是不确定为什么会出现问题。
尝试2:
使用gremlin客户端。我尝试覆盖名称为is
的另一个遍历对象。但是,覆盖操作失败(l
)。
l = subgraph.traversal();
答案 0 :(得分:0)
您可以从那里继续遍历:
s.V().filter(bothE().limit(50).count().is(lt(50))).out().has(...)....
或:
List<Vertex> list = s.V().filter(bothE().limit(50).count().is(lt(50))).toList()
s.V(list).out().has(...)....