Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
317 views
in Technique[技术] by (71.8m points)

java - Gremlin Double cannot be cast to class org.apache.tinkerpop.gremlin.structure.Element

I try to implement a gremlin traversal on Java.

In here, I try to insert/update score of "VISIBLE_ON" relation with calculated score according to my pipeline.

    GraphTraversal t = graph.V().hasLabel("App").as("a")
            .inE("RANKS").as("r")
            .outV().as("k")
            .choose(__.select("k").by("countryCode").is(__.in(...)),
                    __.math("1.0 / r").by("rank1"),
                    __.math("1.0 / r").by("rank2"))
            .as("score")
            .has("Country", "countryCode", __.select("k")
                    .by("countryCode")).as("c")
            .inE("VISIBLE_ON").as("v")
            .property("score", __.select("score"))
            .select("c");

but I try to run my gremlin code, exception occurred like: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: class java.lang.Double cannot be cast to class org.apache.tinkerpop.gremlin.structure.Element

Is there any suggestion?

Solved like below:

GraphTraversal t = graph.V().hasLabel("App").as("a")
        .inE("RANKS").as("r")
        .outV().as("k")
        .choose(__.select("k").by("countryCode").is(__.in(...)),
                __.math("1.0 / r").by("rank1"),
                __.math("1.0 / r").by("rank2"))
        .as("score")
        .select("a")
        .outE("VISIBLE_ON").as("v")
        .property("score", __.select("score"))
        .inV().as("c")
        .hasLabel("Country")
        .has("countryCode", __.select("k").by("countryCode")).as("c")
        .select("c");
question from:https://stackoverflow.com/questions/66065949/gremlin-double-cannot-be-cast-to-class-org-apache-tinkerpop-gremlin-structure-el

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I think your problem is here:

.choose(__.select("k").by("countryCode").is(__.in(...)),
        __.math("1.0 / r").by("rank1"),
        __.math("1.0 / r").by("rank2"))
.as("score")
.has("Country", "countryCode", __.select("k")

The choose() produces a double from either math() branch and then you try to call has() on the double and has() is only meant to work on Element.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...