当前位置: 首页 > 知识库问答 >
问题:

Gremlin CSV解析创建额外顶点

班建义
2023-03-14

我的代码应该读取4列,将它们分成前2列的顶点和后两列的边缘属性。CSV文件在37行数据中有33个唯一顶点。我不明白的是为什么我得到74个顶点和37条边。有趣的是,如果我省略addE语句,我只得到37个顶点。

很明显,由于我一直在努力解决当前的问题,财产部分没有包括在内。

1\t2\tstep\tcmp
2\t3\tconductor\tna
3\t4\tswitch\tZ300

\t代表标签等。

我的代码是:

graph = TinkerGraph.open()
graph.createIndex('myId', Vertex.class)
g = graph.traversal()
getOrCreate = { myid ->
   p = g.V('myId', myid)
   if (!p.hasNext())
     {g.addV('connector').property('myId',myid) }  
   else
     {p.next()}
}
new File('Continuity.txt').eachLine {
   if (!it.startsWith("#")){
       def row  = it .split('\t')
       def fromVertex = getOrCreate(row[0])
       def toVertex = getOrCreate(row[1])
       g.addE("connection").from(fromVertex).to(toVertex).iterate()  
   }
}

共有1个答案

能帅
2023-03-14

我看到的代码中至少有一个问题。在这一行中:

p = g.V('myId', myid)

您正在告诉gremlin查找ID为“myId”的顶点以及变量myId的值。您希望:

p = g.V().has('myId', myid)

您使用的语法来自TinkerPop 2. x。我通过其他一些更改以这种方式测试了您的代码,现在它似乎可以正常工作:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.createIndex('myId', Vertex.class)
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> getOrCreate = { myid ->
......1>    if (!g.V().has('myId', myid).hasNext())
......2>      g.addV('connector').property('myId',myid)
......3>    else
......4>      g.V().has('myId', myid)
......5> }
==>groovysh_evaluate$_run_closure1@29d37757
gremlin> g.addE('connection').from(getOrCreate(1)).to(getOrCreate(2)).iterate()
gremlin> g.addE('connection').from(getOrCreate(1)).to(getOrCreate(2)).iterate()
gremlin> g.V()
==>v[0]
==>v[2]
gremlin> g.E()
==>e[4][2-connection->0]
==>e[5][2-connection->0]
 类似资料:
  • 我写了一个简单的控制台应用程序,它使用JPA连接到MySQL数据库。数据的实际读写工作正常,但日志记录似乎被搞砸了。我创建的每个EntityManager实例似乎都将自己的log4j appender添加到控制台。因此,由于我的应用程序中有三个实体管理器实例,除了我想要的“真实”控制台输出行之外,我的控制台输出中还有三行额外的行。这里有一个例子。第一行来自我的“真正的”附件,另外三行似乎来自实体管

  • OrientDB数据库不仅是一个文档数据库,也是一个图形数据库。 和等新概念用于以图形的形式存储数据。 它在顶点上应用多态性。 的基类是. 在本章中,您将学习如何创建顶点来存储图形数据。 以下语句是创建顶点()命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义顶点所属的类。 - 定义存储顶点的集群。 - 定义要设置的字段。 - 定义为字段设置的表达式。 示例 尝试下面的示例来了解如何

  • 问题内容: 我有一个档案。它的简化版本如下所示: 我运行此脚本来解析它: 但我收到此错误: 您能指出我所缺少的吗? 问题答案: 您的JSON数据集无效,您可以将它们合并为一个对象数组。例如 : 在JSON中,您不能有多个顶级对象,但可以有对象数组,并且它是有效的 如果需要,可以在此链接中看到更多的JSON数据集示例。 如果您想了解有关JSON数组的更多信息,请阅读w3schools JSON教程

  • 我正在使用recyclerview显示来自web服务的图像列表。我正在尝试在CardView小部件的ImageView中显示图像。一切正常。所有图像和列表都正确显示。但当我尝试在Kitkat 4.4.4上运行时,它会在Cardview中的图像顶部和底部显示额外的(大)填充。我只使用ImageView,没有文本,没有任何内容。 检查附加图像。 Cardview的XML代码

  • 已经提出了与此相关的问题。我什么都试过了,但没能解决我的问题。我挣扎了2个小时,现在我在这里发布这个。 问题:UIScrollView的顶级contentInset总是有20像素的额外空间。 我有视图控制器XIB,而不是故事板。 首先,stackoverflow上的相关问题及其解决方案假设UIScrollView是UIViewController的根视图。但是我的滚动视图不是根视图,因此可能 se

  • 问题内容: 我正在多线程环境中聚合键的多个值。密钥未知。我以为我会做这样的事情: 我看到的问题是,每次运行此方法时,我都需要创建一个新的实例,然后将其丢弃(在大多数情况下)。这似乎是对垃圾收集器的不合理滥用。是否有更好的,线程安全的方法来初始化这种结构而不必使用该方法?我对使该方法不返回新创建的元素的决定感到惊讶,并且对缺少除非被要求(可以这么说)实例化实例的延迟的方法感到惊讶。 问题答案: Ja