标签: tinkerpop3

通过函数链创建节点和边时,在命令末尾使用 Iterate() 步骤。这一步有什么用呢?

在 Tinkerpop 3.3/Gremlin 中通过函数链创建节点和边时,在命令末尾使用 Iterate() 步骤。这个 iterate() 步骤的意义是什么?我在解释其功能的文档中找不到任何提及 iterate() 步骤的内容。有人可以向我指出文档或提供有关 iterate() 的解释吗?可以在此处找到迭代用法的链接

gremlin tinkerpop3

6
推荐指数
1
解决办法
2650
查看次数

Gremlin:使用项目时,“提供的遍历器未映射到值”

在现代图中,我想为每个人获取他创建的软件的名称和名称列表。所以我尝试了以下查询

g.V().hasLabel('person').project('personName','softwareNames').
                         by(values('name')).
                         by(out('created').values('name').aggregate('a').select('a'))
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

The provided traverser does not map to a value: v[2]->[VertexStep(OUT,[created],vertex), PropertiesStep([name],value), AggregateStep(a), SelectOneStep(last,a)]
Run Code Online (Sandbox Code Playgroud)

问题似乎在于顶点2没有“创建”的边。

如果仅在具有至少一个“已创建”边缘的顶点上运行查询,则该查询有效,例如对于顶点4(“ V(4)”而不是“ V()”),结果为

==>[personName:josh,softwareNames:[ripple,lop]]
Run Code Online (Sandbox Code Playgroud)

如何获得顶点2的软件名称的空列表,而不是错误的列表?

graph-databases gremlin tinkerpop3

6
推荐指数
1
解决办法
1460
查看次数

无法删除/删除Vertex Titan 1.0 Tinkerpop 3上的多个属性键

非常基本的问题,
我刚刚将我的Titan从0.54升级到Titan 1.0 Hadoop 1/TP3 3.01版本.

我遇到删除值的问题

Property key: Cardinality.LIST/SET
Run Code Online (Sandbox Code Playgroud)

也许这是由于升级过程或仅仅是我的TP3误解.

 // ----- CODE ------:

tg = TitanFactory.open(c);

TitanManagement mg = tg.openManagement();

//create KEY (Cardinality.LIST) and commit changes
tm.makePropertyKey("myList").dataType(String.class).cardinality( Cardinality.LIST).make();
mg.commit();

//add vertex with multi properties

Vertex v = tg.addVertex();

v.property("myList", "role1");
v.property("myList", "role2");
v.property("myList", "role3");
v.property("myList", "role4");
v.property("myList", "role4");
Run Code Online (Sandbox Code Playgroud)

现在,我想删除所有值"role1,role2 ...."

// iterate over all values and try to remove the values 
 List<String> values = IteratorUtils.toList(v.values("myList"));
        for (String val : values) {
            v.property("myList", val).remove();
         }
  tg.tx().commit();
Run Code Online (Sandbox Code Playgroud)

// …

gremlin titan tinkerpop tinkerpop3

5
推荐指数
2
解决办法
2129
查看次数

如何更新Gremlin服务器中的顶点值(Titan 1.0)

我有一个带有以下细节的顶点:

HTTP://本地主机:8182 /的gremlin = GV(4192)

{

"requestId": "6ce01f3b-f623-41f6-bb03-dd56014e0701",
"status": 

{

"message": "",
"code": ?200,
"attributes": { }

},
"result": 
{

"data": 

[

{

"id": ?4192,
"label": "person",
"type": "vertex",
"properties": 

{

"name": 

[

{
    "id": "170-38g-sl",
    "value": "marko2"
}

],
"age": 
[

                    {
                        "id": "1l8-38g-28lh",
                        "value": ?29
                    }
                ]
            }
        }
    ],
    "meta": { }
}

}
Run Code Online (Sandbox Code Playgroud)

我想更新顶点的名称:

我试过以下查询:

GV(4192).setProperty( '名', '威廉')

但它没有更新,它给出了错误

{

 "message": "Error encountered evaluating script: g.V(4192).setProperty('name','William')"

}
Run Code Online (Sandbox Code Playgroud)

graph gremlin titan tinkerpop3 gremlin-server

5
推荐指数
2
解决办法
5762
查看次数

使用特定模型通过 Tinkerpop 将(数百万行)数据导入 Janusgraph 的最佳方法

刚开始使用 Tinkerpop 和 Janusgraph,我正试图根据文档弄清楚这一点。

  • 我有三个数据集,每个数据集包含大约 2000 万行(csv 文件)
  • 有一个特定的模型,其中变量和行需要连接,例如什么是顶点,什么是标签,什么是边等。
  • 在图表中包含所有内容后,我当然想使用一些基本的 Gremlin 来查看模型的工作情况。

但首先我需要一种将数据导入 Janusgraph 的方法。

可能存在用于此的脚本。但除此之外,它是否可能用python编写,打开一个csv文件,获取变量X的每一行,并将其添加为顶点/边/等。……?还是我完全误解了 Janusgraph/Tinkerpop?

提前感谢您的任何帮助。

编辑:

假设我有几个文件,每个文件包含几百万行,代表人,还有几个变量,代表不同的指标。第一个示例可能如下所示:

             metric_1    metric_2    metric_3    ..

person_1        a           e           i
person_2        b           f           j
person_3        c           g           k
person_4        d           h           l
..        
Run Code Online (Sandbox Code Playgroud)

我是否应该将其转换为具有首先仅由值 [a,..., l] 组成的节点的文件。(以及后来可能更精细的属性集)

然后 [a,..., l] 被索引了吗?

在“现代”图形这里似乎有一个索引(号码1,...,12对所有的节点和边,独立于它们的重叠标签/类别的),例如应在每次测量单独索引,然后连接至一个给定的person_x他们属于哪个?

为这些可能直截了当的问题道歉,但我对此很陌生。

python gremlin tinkerpop tinkerpop3 janusgraph

5
推荐指数
2
解决办法
2684
查看次数

Tinkerpop &amp; Python - 通过 gremlin 设置数组属性

我将 JanusGraph 与标准 python gremlin 绑定一起使用,我想float[]在顶点/边上设置一个属性。但是,PythonTinkerpop 驱动程序似乎无法做到这一点。

例如,下面是一个直接在 Groovy 中运行的脚本示例:

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

这是使用 gremlin python 库时失败的代码:

val = [1.2, 3.4, 5.6]
g.V(4200).property('a', val).next()
Run Code Online (Sandbox Code Playgroud)

错误在哪里:

GremlinServerError: 500: Property value [[1.2, 3.4, 5.6]] is of type class java.util.ArrayList is not supported
Run Code Online (Sandbox Code Playgroud)

该错误可能是因为请求是由 python 驱动程序在 GraphSON 中序列化的 - 并且 GraphSON 支持具有不同类型元素的数组,因此场景背后的 Java 代码将值读取为 a java.util.ArrayList,而实际上无法转换为float[].

问题是 - 除了编写显式查询字符串之外,是否有任何理智的方法可以做到这一点?

python gremlin tinkerpop tinkerpop3 janusgraph

5
推荐指数
1
解决办法
991
查看次数

如何处理具有大量边的顶点?

在我们的图中,有很多顶点的输出边超过 100k。我想知道处理由此产生的所有情况的方法是什么。

假设我们group_1在图中定义了一个。group_1有 100k members。我们有一些从member_x顶点开始的遍历并计算一些东西。这些遍历非常快,每次都在大约 2 秒内结束。

但是时代变了,现在我们需要将单个小遍历的所有结果汇总为一个数字。遍历必须包含来自group_1's 成员的所有结果。

最初,我们的方法是创建其发射一束遍历members_x通过使用skiplimit,然后,在应用层上采用并行处理,计数的我们的东西的总和。但是,这种方法几乎没有问题:

  • g.V().has('group',y).out('member_of').skip(0).limit(10)- 根据文档,这种遍历每次可以返回不同的结果。所以以这种方式创建包是不正确的
  • g.V().has('group',y).out('member_of').skip(100_000).limit(10) 花费太长时间,因为正如我们发现的那样,数据库仍然需要访问 100k 个顶点

因此,我们的下一个方法是存储一个遍历,该遍历会发出束,members然后在单独的线程中执行并行遍历,这些遍历对先前获取的成员进行计数:

while(is_not_the_end) {
   List<Members> members = g.V().has('group',y).out('member_of').next(100)`
   addMembersToExecutorThread(members) // done in async way
}
Run Code Online (Sandbox Code Playgroud)

那么,当你遇到这样的场景时,有什么方法呢?基本上,如果可以找到一种方法来快速获取某个顶点的所有祖先,我们就可以解决该问题。在我们的例子中,这将是一个group_1. 但是仅仅通过使用g.V().has('group',y).out('member_of').properties('members_id').

有没有办法解决这个问题?或者我们应该尝试在 GraphComputer 上执行这样的查询?

gremlin tinkerpop tinkerpop3 gremlin-server janusgraph

5
推荐指数
1
解决办法
412
查看次数

gremlin python - 向顶点添加多个但数量未知的属性

我想向一个顶点添加多个属性,但从一开始就没有明确知道这些属性可能是什么。例如,假设将一个人作为顶点添加到图中,我们有以下属性字典:

人 1

{
    "id": 1,
    "first_name": "bob",
    "age": 25,
    "height": 177
}
Run Code Online (Sandbox Code Playgroud)

也许要添加另一个顶点,一个人具有以下属性:

人 2

{
    "id": 2,
    "first_name": "joe",
    "surname": "bloggs",
    "occupation": "lawyer",
    "birthday": "12 September"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将两个人都添加到图中,而无需将属性键和值显式硬编码到 Gremlin属性函数中?

链接提供了正确方向的答案。可在此处找到更多有用信息。以下行反映了建议的解决方案,按预期执行,并将新顶点添加到图中。伟大的。

g.addV("person").property("id", 1, "first_name", "bob", "age", 25, "height", 177).next()
Run Code Online (Sandbox Code Playgroud)

但是,它仅在输入是硬编码的情况下才寻求工作。我已将属性字典转换为 (k1, v1, k2, v2, ..., kn, vn) 形式的值元组,但我无法以编程方式传递值。例如

tup_vals = ("id", 1, "first_name", "bob", "age", 25, "height", 177)
Run Code Online (Sandbox Code Playgroud)

但无论出于何种原因,我都不能打电话:

g.addV("person").property(*tup_vals).next()
Run Code Online (Sandbox Code Playgroud)

上面的行不会抛出异常,它只是没有按预期执行(即没有传入属性)

有没有人对如何以计算方式将这些属性字典传递给 Gremlin 属性函数有任何见解?


更新:幼稚/低效的解决方案

下面提供了一个解决方案,但这是一个糟糕的解决方案,因为它每次迭代都会查询 gremlin 服务器。理想情况下,我想同时添加所有属性。并且只有在 id 是唯一的情况下才能真正按预期工作。

g.addV("person").property('id', id).next()

for …
Run Code Online (Sandbox Code Playgroud)

python gremlin tinkerpop tinkerpop3 gremlin-server

5
推荐指数
1
解决办法
1969
查看次数

未找到 org.janusgraph.graphdb.relations.RelationIdentifier 类型的序列化程序

从 java 客户端检索边时,JanusGraph v0.5.3 服务器日志中显示以下错误

12277786 [gremlin-server-exec-7] WARN  org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor  - The result [[e[ofncw-iyo-4avp-374][24576-hasTag->4144]]] in the request 098dc551-6558-497a-a066-b293edd29833 could not be serialized and returned.
org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.io.IOException: Serializer for type org.janusgraph.graphdb.relations.RelationIdentifier not found
    at org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer.writeValue(ResponseMessageSerializer.java:86)
    at org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1.serializeResponseAsBinary(GraphBinaryMessageSerializerV1.java:143)
    at org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.makeFrame(AbstractOpProcessor.java:335)
    at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.handleIterator(TraversalOpProcessor.java:580)
    at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.lambda$iterateBytecodeTraversal$4(TraversalOpProcessor.java:411)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Serializer for type org.janusgraph.graphdb.relations.RelationIdentifier not found
    at org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry.validateInstance(TypeSerializerRegistry.java:392)
    at org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry.getSerializer(TypeSerializerRegistry.java:361)
    at org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter.write(GraphBinaryWriter.java:90)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.EdgeSerializer.writeValue(EdgeSerializer.java:63)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.EdgeSerializer.writeValue(EdgeSerializer.java:34)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.SimpleTypeSerializer.writeValue(SimpleTypeSerializer.java:91)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.SimpleTypeSerializer.write(SimpleTypeSerializer.java:73)
    at org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter.write(GraphBinaryWriter.java:112)
    at org.apache.tinkerpop.gremlin.structure.io.binary.types.TraverserSerializer.writeValue(TraverserSerializer.java:49) …
Run Code Online (Sandbox Code Playgroud)

serialization gremlin tinkerpop3 janusgraph

5
推荐指数
1
解决办法
1217
查看次数

匿名遍历与正常遍历 gremlin

我已阅读有关匿名遍历的文档。我知道它们可以开始使用__,并且可以在步进调制器内使用。虽然我从概念上不理解它。为什么我们不能使用从步骤调制器内的图遍历源生成的正常遍历?例如,在下面的 gremlin 代码中创建一条边

        this.g
            .V(fromId) // get vertex of id given for the source
            .as("fromVertex") // label as fromVertex to be accessed later
            .V(toId) // get  vertex of id given for destination
            .coalesce( // evaluates the provided traversals in order and returns the first traversal that emits at least one element
                inE(label) // check incoming edge of label given
                    .where( // conditional check to check if edge exists
                        outV() // get destination vertex of the edge to check …
Run Code Online (Sandbox Code Playgroud)

gremlin tinkerpop tinkerpop3 janusgraph amazon-neptune

5
推荐指数
1
解决办法
2819
查看次数