-
-
Save zhiboz/98ef9d227ee925fe4b32988601c767a3 to your computer and use it in GitHub Desktop.
This groovy script loads the Enron email graph and performs a traversal for the shortest path between two nodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
wget https://snap.stanford.edu/data/email-Enron.txt.gz | |
gunzip email-Enron.txt.gz | |
bin/gremlin.sh #and then :load enron.groovy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
graph = TinkerGraph.open() | |
graph.createIndex("nodeId", Vertex.class) | |
vertexMap = new HashMap<Integer, Vertex>(); | |
new File("email-Enron.txt").eachLine { final String line -> | |
if(!line.startsWith("#")) { | |
g = graph.traversal() | |
outin = line.split("\\s+") | |
outV = Integer.valueOf(outin[0]) | |
inV = Integer.valueOf(outin[1]) | |
if(!vertexMap.containsKey(outV)) { | |
vertexMap.put(outV, graph.addVertex(label, 'node', 'nodeId', outV)) | |
} | |
if(!vertexMap.containsKey(inV)) { | |
vertexMap.put(inV, graph.addVertex(label, 'node', 'nodeId', inV)) | |
} | |
vertexMap.get(outV).addEdge('similar', vertexMap.get(inV)) | |
} | |
} | |
class DepthPredicate implements java.util.function.Predicate<Traverser<T>> { | |
private final int hops; | |
public DepthPredicate(int hops) { this.hops = hops; } | |
public boolean test(Traverser<T> t) { return t.path().size() <= hops; } | |
} | |
d = new DepthPredicate(5) | |
start = Integer.valueOf(775); | |
end = Integer.valueOf(990); | |
//g.V().has("nodeId", start).repeat(out('similar').simplePath()).until(has('nodeId', end).and().filter(d)).limit(1).path().by('nodeId') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
graph = com.thinkaurelius.titan.core.TitanFactory.build().set("storage.backend", "inmemory"). | |
set("storage.transactions", "false").set("storage.batch-loading", "true").open() | |
mgmt = ((com.thinkaurelius.titan.graphdb.database.StandardTitanGraph) graph).openManagement() | |
nodeIdPropKey = mgmt.makePropertyKey("nodeId").dataType(Integer.class).make() | |
mgmt.buildIndex('byNodeId', org.apache.tinkerpop.gremlin.structure.Vertex.class).addKey(nodeIdPropKey).unique(). | |
buildCompositeIndex() | |
mgmt.makeEdgeLabel("similar").make() | |
mgmt.makeVertexLabel("node").make() | |
mgmt.commit() | |
graph.tx().commit() | |
new File("Email-Enron.txt").eachLine { final String line -> | |
if(!line.startsWith("#")) { | |
g = graph.traversal() | |
outin = line.split("\\s+") | |
outV = outin[0] | |
inV = outin[1] | |
def outVertex = g.V().has("nodeId", outV).tryNext(). | |
orElseGet { graph.addVertex(label, 'node', 'nodeId', Integer.valueOf(outV.trim())) } | |
def inVertex = g.V().has("nodeId", inV).tryNext(). | |
orElseGet { graph.addVertex(label, 'node', 'nodeId', Integer.valueOf(inV.trim())) } | |
outVertex.addEdge('similar', inVertex) | |
} | |
} | |
graph.tx().commit() | |
g = graph.traversal() | |
class DepthPredicate implements java.util.function.Predicate<Traverser<T>> { | |
private final int hops; | |
public DepthPredicate(int hops) { this.hops = hops; } | |
public boolean test(Traverser<T> t) { return t.path().size() <= hops; } | |
} | |
maxDepth = new DepthPredicate(5) | |
//gremlin server pegs processor to 100% and JVM image size increases without bound after the matching path is printed | |
//the console prompt delays very much to come back | |
g.V().has("nodeId", 775).repeat(out('similar').simplePath()).until(has('nodeId',990).and().filter(maxDepth))). | |
limit(1).path().by('nodeId') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment