[
https://issues.apache.org/jira/browse/TINKERPOP-1140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15145753#comment-15145753
]
ASF GitHub Bot commented on TINKERPOP-1140:
-------------------------------------------
Github user dkuppitz commented on the pull request:
https://github.com/apache/incubator-tinkerpop/pull/227#issuecomment-183578927
* `mvn clean install`: passed
* integration tests: passed
Looking forward to try that out and see it in action.
VOTE: +1
> TraversalVertexProgramStep in support of OLAP/OLTP conversions.
> ---------------------------------------------------------------
>
> Key: TINKERPOP-1140
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1140
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.1.0-incubating, 3.1.1-incubating, 3.1.2-incubating
> Reporter: Marko A. Rodriguez
> Fix For: 3.2.0-incubating
>
>
> This was moved from TINKERPOP-971. TINKERPOP-971 was about TraversalSource
> fluency. This is a feature we can now do because of that work. Isolated this
> feature in a new ticket.
> --------------
> Check this idea out:
> {code}
> g = graph.traversal().withComputer(graph ->
> graph.compute(SparkGraphComputer.class).workers(10));
> g.V().out().values('name')
> {code}
> This would compile to:
> {code}
> [TraversalVertexProgramStep([GraphStep,VerticesStep,PropertiesStep]),ComputerResultStep]
> {code}
> where,
> {code}
> TraversalVertexProgramStep<Graph,ComputerResult>
> ComputerResultStep<ComputerResult,E>
> {code}
> Next, check this:
> {code}
> g = graph.traversal().withComputer(graph ->
> graph.compute(SparkGraphComputer.class).workers(10));
> g.V().hasLabel('person').pageRank(out('knows')).order().by('page.rank',decr)
> {code}
> This will compile to:
> {code}
> [TraversalVertexProgramStep([GraphStep,HasStep]),PageRankVertexProgramStep([VerticesStep]),TraversalVertexProgramStep([OrderStep]),ComputerResultStep]
> {code}
> How does this work?!
> * TraversalVertexProgramStep will pass a {{ComputerResult}} to
> PageRankVertexProgram.
> ** The ComputerResult.graph() will have HALTED_TRAVERSERS properties on all
> the person vertices (as that is what was computed by the vertex program).
> * PageRankVertexProgram will then pass a {{ComputerResult}} to the next
> TraversalVertexProgram.
> ** That ComputerResult.graph() will have HALTED_TRAVERSER on all the person
> vertices and PAGE_RANK on all the vertices.
> * TraversalVertexProgram will then execute OrderStep which sorts the
> person-vertices with HALTED_TRAVERSERS on them by their page.rank properties
> computed previously.
> * ComputerResultStep will then take get the ComputerResult.memory.reducing
> and iterate it out.
> {{ComputerResultStep}} (like now) is smart about either pulling from the
> graph or from the sideEffect memory. What makes things different from now is
> that {{TraversalVertexProgramStep}} will come into existence and pull out the
> respective logic from {{ComputerResultStep}}. In this way, It will be
> possible to chain {{{XXXVertexProgramStep}}-steps and thus, have a traversal
> that is multiple OLAP jobs in sequence and thus, this ticket will fall
> naturally from this https://issues.apache.org/jira/browse/TINKERPOP-570. The
> whole trick to all of this is that (as we currently do) we save the state of
> the computation in the graph (and memory) and thus, feeding program into the
> next just takes over the computation. PageRankVertexProgram doesn't use
> HALTED_TRAVERSERS in its computation, so it just ignores it. However,
> TraversalVertexProgram can later access PAGE_RANK and thus, use the results
> of the previous OLAP computation.
> Finally, you want "lambda vertex programs?"
> {code}
> g = graph.traversal().withComputer(graph ->
> graph.compute(SparkGraphComputer.class).workers(10));
> myProgram = MyVertexProgram.build().create();
> g.V().program(myProgram).values('myProgramCounters')
> {code}
> which compiles to:
> {code}
> [TraversalVertexProgramStep([GraphStep]),LambdaVertexProgramStep(MyVertexProgram),TraversalVertexProgramStep([PropertiesStep]),ComputerResultStep]
> {code}
> Thus, just like {{filter()}},{{flatMap()}}, etc....
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)