У меня есть график, на котором некоторые узлы имеют миллионы входящих ребер. Мне нужно периодически получать количество ребер таких узлов. Я использую Кассандар в качестве хранилища данных.
Запрос:
g.V().has('vid','qwerty').inE().count().next()
Вся доступная документация объясняет, как использовать apache spark для этого с консоли gremlin.
Могу ли я как-нибудь написать логику вне консоли gremlin как задание spark и периодически запускать id на кластере hadoop.
Вот вывод запроса на консоли gremlin, когда я не использую spark:
14108889 [gremlin-server-session-1] WARN org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor -
Обработка исключений сценария по запросу [RequestMessage {,
requestId = c3d902b7-0fdd-491d-8639-546963212474, op = 'eval',
процессор = «сессии»,
арг = {гремлин = g.V (). есть ( 'VID', 'букв на'). в Е (). Count (). Следующий (),
сеанс = 2831d264-4566-4d15-99c5-d9bbb202b1f8, привязки = {},
manageTransaction = false, batchSize = 64}}]. TimedOutException () в
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result $ multiget_slice_resultStandardScheme.read (Cassandra.java:14696) в
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result $ multiget_slice_resultStandardScheme.read (Cassandra.java:14633) в
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result.read (Cassandra.java:14559)
в
org.apache.thrift.TServiceClient.receiveBase (TServiceClient.java:78)
в
org.apache.cassandra.thrift.Cassandra $ Client.recv_multiget_slice (Cassandra.java:741)
в
org.apache.cassandra.thrift.Cassandra $ Client.multiget_slice (Cassandra.java:725)
в
org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice (CassandraThriftKeyColumnValueStore.java:143)
в
org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getSlice (CassandraThriftKeyColumnValueStore.java:100)
в
org.janusgraph.diskstorage.keycolumnvalue.KCVSProxy.getSlice (KCVSProxy.java:82)
в
org.janusgraph.diskstorage.keycolumnvalue.cache.ExpirationKCVSCache.getSlice (ExpirationKCVSCache.java:129)
в
org.janusgraph.diskstorage.BackendTransaction $ 2.call (BackendTransaction.java:288)
в
org.janusgraph.diskstorage.BackendTransaction $ 2.call (BackendTransaction.java:285)
в
org.janusgraph.diskstorage.util.BackendOperation.executeDirect (BackendOperation.java:69)
в
org.janusgraph.diskstorage.util.BackendOperation.execute (BackendOperation.java:55)
в
org.janusgraph.diskstorage.BackendTransaction.executeRead (BackendTransaction.java:470)
в
org.janusgraph.diskstorage.BackendTransaction.edgeStoreMultiQuery (BackendTransaction.java:285)
в
org.janusgraph.graphdb.database.StandardJanusGraph.edgeMultiQuery (StandardJanusGraph.java:441)
в
org.janusgraph.graphdb.transaction.StandardJanusGraphTx.lambda $ executeMultiQuery $ 3 (StandardJanusGraphTx.java:1054)
в
org.janusgraph.graphdb.query.profile.QueryProfiler.profile (QueryProfiler.java:98)
в
org.janusgraph.graphdb.query.profile.QueryProfiler.profile (QueryProfiler.java:90)
в
org.janusgraph.graphdb.transaction.StandardJanusGraphTx.executeMultiQuery (StandardJanusGraphTx.java:1054)
в
org.janusgraph.graphdb.query.vertex.MultiVertexCentricQueryBuilder.execute (MultiVertexCentricQueryBuilder.java:113)
в
org.janusgraph.graphdb.query.vertex.MultiVertexCentricQueryBuilder.edges (MultiVertexCentricQueryBuilder.java:133)
в
org.janusgraph.graphdb.tinkerpop.optimize.JanusGraphVertexStep.initialize (JanusGraphVertexStep.java:95)
в
org.janusgraph.graphdb.tinkerpop.optimize.JanusGraphVertexStep.processNextStart (JanusGraphVertexStep.java:101)
в
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext (AbstractStep.java:143)
в
org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.hasNext (ExpandableStepIterator.java:42)
вorg.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep.processAllStarts (ReducingBarrierStep.java:83)
в
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep.processNextStart (ReducingBarrierStep.java:113)
в
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next (AbstractStep.java:128)
в
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next (AbstractStep.java:38)
в
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next (DefaultTraversal.java:200)
в java_util_Iterator $ next.call (неизвестный источник) в
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:48)
в
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:113)
в
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:117)
в Script13.run (Script13.groovy: 1) в
org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval (GremlinGroovyScriptEngine.java:843) в
org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval (GremlinGroovyScriptEngine.java:548) в
javax.script.AbstractScriptEngine.eval (AbstractScriptEngine.java:233)
в
org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval (ScriptEngines.java:120)
в
org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda $ Eval $ 0 (GremlinExecutor.java:290)
в java.util.concurrent.FutureTask.run (FutureTask.java:266) в
java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511)
в java.util.concurrent.FutureTask.run (FutureTask.java:266) в
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
в
java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
at java.lang.Thread.run (Thread.java:748)
Однако g.V().has('vid','qwerty').inE().limit(10000).count().next()
работает нормально и дает ==>10000