@Override public void flatMap(Tuple2<Vertex, List<GradoopId>> value, Collector<Edge> out) { for (GradoopId sourceId : value.f1) { if (edgeDirection.equals(EdgeDirection.BIDIRECTIONAL) || edgeDirection.equals(EdgeDirection.NEWVERTEX_TO_ORIGIN)) { out.collect(edgeFactory.createEdge(edgeLabel, value.f0.getId(), sourceId)); } if (edgeDirection.equals(EdgeDirection.BIDIRECTIONAL) || edgeDirection.equals(EdgeDirection.ORIGIN_TO_NEWVERTEX)) { out.collect(edgeFactory.createEdge(edgeLabel, sourceId, value.f0.getId())); } } } }
protected DataSet<Edge> createEdgesWithProperties(List<String> propertyNames) { Properties properties = getProperties(propertyNames); EdgeFactory edgeFactory = new EdgeFactory(); List<Edge> edges = Lists.newArrayList( edgeFactory.createEdge("Label1", GradoopId.get(), GradoopId.get(), properties), edgeFactory.createEdge("Label2", GradoopId.get(), GradoopId.get(), properties) ); return getExecutionEnvironment().fromCollection(edges); }
@Test public void testFilterEdgesByLabel() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a:likes]->()"); EdgeFactory edgeFactory = new EdgeFactory(); Edge e1 = edgeFactory.createEdge("likes", GradoopId.get(), GradoopId.get()); Edge e2 = edgeFactory.createEdge("knows", GradoopId.get(), GradoopId.get()); DataSet<Edge> edges = getExecutionEnvironment().fromElements(e1, e2); List<Embedding> result = new FilterAndProjectEdges(edges, predicates, new ArrayList<>(), false) .evaluate() .collect(); assertEquals(1, result.size()); assertEquals(result.get(0).getId(1), e1.getId()); }
@Test public void testProjectionOfMissingValues() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[e]->(b)"); Vertex a = vertexFactory.createVertex("Person"); Vertex b = vertexFactory.createVertex("Person"); Edge e = edgeFactory.createEdge("knows", a.getId(), b.getId()); DataSet<Triple> triples = getExecutionEnvironment().fromElements(new Triple(a, e, b)); HashMap<String, List<String>> propertyKeys = new HashMap<>(); propertyKeys.put("a", Lists.newArrayList("name")); propertyKeys.put("e", Lists.newArrayList("since")); propertyKeys.put("b", Lists.newArrayList("name")); Embedding result = new FilterAndProjectTriples(triples, "a", "e", "b", predicates, propertyKeys, MatchStrategy.ISOMORPHISM ).evaluate().collect().get(0); assertEquals(result.getProperty(0), PropertyValue.NULL_VALUE); assertEquals(result.getProperty(1), PropertyValue.NULL_VALUE); assertEquals(result.getProperty(2), PropertyValue.NULL_VALUE); } }
@Test public void testFilterByHomomorphism() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[e]->(b)"); Vertex a = vertexFactory.createVertex("Person"); Vertex b = vertexFactory.createVertex("Person"); Edge e1 = edgeFactory.createEdge("loves", a.getId(), a.getId()); Edge e2 = edgeFactory.createEdge("loves", a.getId(), b.getId()); DataSet<Triple> triples = getExecutionEnvironment().fromElements( new Triple(a, e1, a), new Triple(a, e2, b) ); List<Embedding> result = new FilterAndProjectTriples(triples, "a", "e", "b", predicates, new HashMap<>(), MatchStrategy.HOMOMORPHISM ).evaluate().collect(); assertEquals(2, result.size()); }
@Test public void testResultingEntryForSelfLoops() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[e]->(a)"); Vertex a = vertexFactory.createVertex("Person"); Edge e = edgeFactory.createEdge("loves", a.getId(), a.getId()); DataSet<Triple> triples = getExecutionEnvironment().fromElements(new Triple(a, e, a)); List<Embedding> result = new FilterAndProjectTriples(triples, "a", "e", "a", predicates, new HashMap<>(), MatchStrategy.ISOMORPHISM ).evaluate().collect(); assertEquals(1, result.size()); assertEquals(2, result.get(0).size()); assertEquals(a.getId(), result.get(0).getId(0)); assertEquals(e.getId(), result.get(0).getId(1)); }
@Test public void testFilterWithNoPredicates() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a]->()"); EdgeFactory edgeFactory = new EdgeFactory(); Properties properties = Properties.create(); properties.set("name", "Anton"); Edge e1 = edgeFactory.createEdge("knows", GradoopId.get(), GradoopId.get(), properties); DataSet<Edge> edges = getExecutionEnvironment().fromElements(e1); List<Embedding> result = new FilterAndProjectEdges(edges, predicates, new ArrayList<>(), false) .evaluate() .collect(); assertEquals(1, result.size()); assertEquals(result.get(0).getId(1), e1.getId()); }
@Test public void testFilterEdgesByProperties() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a]->() WHERE a.since > 2013"); EdgeFactory edgeFactory = new EdgeFactory(); Properties properties = Properties.create(); properties.set("since", 2014); Edge e1 = edgeFactory.createEdge("knows", GradoopId.get(), GradoopId.get(), properties); properties = Properties.create(); properties.set("since", 2013); Edge e2 = edgeFactory.createEdge("knows", GradoopId.get(), GradoopId.get(), properties); DataSet<Edge> edges = getExecutionEnvironment().fromElements(e1, e2); List<Embedding> result = new FilterAndProjectEdges(edges, predicates, new ArrayList<>(), false) .evaluate() .collect(); assertEquals(1, result.size()); assertEquals(result.get(0).getId(1), e1.getId()); }
@Test public void testFilterBySelfLoop() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[e]->(a)"); Vertex a = vertexFactory.createVertex("Person"); Vertex b = vertexFactory.createVertex("Person"); Edge e1 = edgeFactory.createEdge("loves", a.getId(), a.getId()); Edge e2 = edgeFactory.createEdge("loves", a.getId(), b.getId()); DataSet<Triple> triples = getExecutionEnvironment().fromElements( new Triple(a, e1, a), new Triple(a, e2, b) ); List<Embedding> result = new FilterAndProjectTriples(triples, "a", "e", "a", predicates, new HashMap<>(), MatchStrategy.ISOMORPHISM ).evaluate().collect(); assertEquals(1, result.size()); assertEquals(result.get(0).getId(0), a.getId()); assertEquals(result.get(0).getId(1), e1.getId()); }
@Test public void testResultingEntryList() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[e]->(b)"); Vertex a = vertexFactory.createVertex("Person"); Vertex b = vertexFactory.createVertex("Person"); Edge e = edgeFactory.createEdge("loves", a.getId(), b.getId()); DataSet<Triple> triples = getExecutionEnvironment().fromElements(new Triple(a, e, b)); List<Embedding> result = new FilterAndProjectTriples(triples, "a", "e", "b", predicates, new HashMap<>(), MatchStrategy.ISOMORPHISM ).evaluate().collect(); assertEquals(1, result.size()); assertEquals(3, result.get(0).size()); assertEquals(a.getId(), result.get(0).getId(0)); assertEquals(e.getId(), result.get(0).getId(1)); assertEquals(b.getId(), result.get(0).getId(2)); }
@Test public void testResultingEntryList() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a]->() WHERE a.name = \"Alice\""); Properties properties = Properties.create(); properties.set("name", "Alice"); Edge edge = new EdgeFactory().createEdge("Label", GradoopId.get(), GradoopId.get(), properties); DataSet<Edge> edges = getExecutionEnvironment().fromElements(edge); List<Embedding> result = new FilterAndProjectEdges(edges, predicates, new ArrayList<>(), false) .evaluate() .collect(); assertEquals(edge.getSourceId(), result.get(0).getId(0)); assertEquals(edge.getId(), result.get(0).getId(1)); assertEquals(edge.getTargetId(), result.get(0).getId(2)); }
@Test public void testProjectLoop() throws Exception { GradoopId a = GradoopId.get(); Edge edge = new EdgeFactory().createEdge(a, a); DataSet<Edge> edges = getExecutionEnvironment().fromElements(edge); Embedding result = new ProjectEdges(edges, Collections.emptyList(), true) .evaluate().collect().get(0); assertEquals(result.size(), 2); assertEquals(a, result.getId(0)); assertEquals(edge.getId(), result.getId(1)); } }
@Test public void testProjectionOfAvailableValues() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a]->() WHERE a.name = \"Alice\""); Properties properties = Properties.create(); properties.set("name", "Alice"); Edge edge = new EdgeFactory().createEdge("Label", GradoopId.get(), GradoopId.get(), properties); DataSet<Edge> edges = getExecutionEnvironment().fromElements(edge); List<String> projectionPropertyKeys = Lists.newArrayList("name"); Embedding result = new FilterAndProjectEdges(edges, predicates, projectionPropertyKeys, false) .evaluate().collect().get(0); assertEquals(result.getProperty(0), PropertyValue.create("Alice")); }
@Test public void testProjectLoop() throws Exception { CNF predicates = predicateFromQuery("MATCH (a)-[b]->(a)"); GradoopId a = GradoopId.get(); Edge edge = new EdgeFactory().createEdge(a, a); DataSet<Edge> edges = getExecutionEnvironment().fromElements(edge); Embedding result = new FilterAndProjectEdges(edges, predicates, Collections.emptyList(), true) .evaluate().collect().get(0); assertEquals(result.size(), 2); assertEquals(a, result.getId(0)); assertEquals(edge.getId(), result.getId(1)); } }
@Test public void testProjectionOfMissingValues() throws Exception { CNF predicates = predicateFromQuery("MATCH ()-[a]->() WHERE a.name = \"Alice\""); Properties properties = Properties.create(); properties.set("name", "Alice"); Edge edge = new EdgeFactory().createEdge("Label", GradoopId.get(), GradoopId.get(), properties); DataSet<Edge> edges = getExecutionEnvironment().fromElements(edge); List<String> projectionPropertyKeys = Lists.newArrayList("name", "since"); Embedding result = new FilterAndProjectEdges(edges, predicates, projectionPropertyKeys, false) .evaluate().collect().get(0); assertEquals(result.getProperty(0), PropertyValue.create("Alice")); assertEquals(result.getProperty(1), PropertyValue.NULL_VALUE); }
@Test public void testEdgeSerialization() throws Exception { EPGMEdge edgeIn = new EdgeFactory().createEdge( "knows", GradoopId.get(), GradoopId.get(), Properties.createFromMap(GradoopTestUtils.SUPPORTED_PROPERTIES), GradoopIdSet.fromExisting(GradoopId.get(), GradoopId.get())); Assert.assertEquals("EPGMEdge POJOs were not equal", edgeIn, GradoopFlinkTestUtils.writeAndRead(edgeIn)); }
@BeforeClass public static void setup() { ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); GradoopFlinkConfig config = GradoopFlinkConfig.createConfig(env); GraphHead g0 = config.getGraphHeadFactory().createGraphHead("A"); GraphHead g1 = config.getGraphHeadFactory().createGraphHead("B"); Vertex v0 = config.getVertexFactory().createVertex("A"); Vertex v1 = config.getVertexFactory().createVertex("B"); Vertex v2 = config.getVertexFactory().createVertex("C"); Edge e0 = config.getEdgeFactory().createEdge("a", v0.getId(), v1.getId()); Edge e1 = config.getEdgeFactory().createEdge("b", v1.getId(), v2.getId()); v0.addGraphId(g0.getId()); v1.addGraphId(g0.getId()); v1.addGraphId(g1.getId()); v2.addGraphId(g1.getId()); e0.addGraphId(g0.getId()); e1.addGraphId(g1.getId()); tx0 = new GraphTransaction(g0, Sets.newHashSet(v0, v1), Sets.newHashSet(e0)); tx1 = new GraphTransaction(g1, Sets.newHashSet(v1, v2), Sets.newHashSet(e1)); }
@BeforeClass public static void setup() { ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); GradoopFlinkConfig config = GradoopFlinkConfig.createConfig(env); g0 = config.getGraphHeadFactory().createGraphHead("A"); g1 = config.getGraphHeadFactory().createGraphHead("B"); v0 = config.getVertexFactory().createVertex("A"); v1 = config.getVertexFactory().createVertex("B"); v2 = config.getVertexFactory().createVertex("C"); e0 = config.getEdgeFactory().createEdge("a", v0.getId(), v1.getId()); e1 = config.getEdgeFactory().createEdge("b", v1.getId(), v2.getId()); v0.addGraphId(g0.getId()); v1.addGraphId(g0.getId()); v1.addGraphId(g1.getId()); v2.addGraphId(g1.getId()); e0.addGraphId(g0.getId()); e1.addGraphId(g1.getId()); }
@Test public void convertEdgeWithLoop() throws Exception { Properties properties = new Properties(); properties.set("foo", 1); properties.set("bar", "42"); properties.set("baz", false); GradoopId a = GradoopId.get(); Edge edge = new EdgeFactory().createEdge( "TestVertex", a, a, properties ); Embedding embedding = EmbeddingFactory.fromEdge(edge, Lists.newArrayList("foo", "bar"), true); assertEquals(2, embedding.size()); assertEquals(edge.getSourceId(), embedding.getId(0)); assertEquals(edge.getId(), embedding.getId(1)); assertEquals(PropertyValue.create(1), embedding.getProperty(0)); assertEquals(PropertyValue.create("42"), embedding.getProperty(1)); } }
@Test public void convertEdge() throws Exception { Properties properties = new Properties(); properties.set("foo", 1); properties.set("bar", "42"); properties.set("baz", false); Edge edge = new EdgeFactory().createEdge( "TestVertex", GradoopId.get(), GradoopId.get(), properties ); Embedding embedding = EmbeddingFactory.fromEdge(edge, Lists.newArrayList("foo", "bar"), false); assertEquals(3, embedding.size()); assertEquals(edge.getSourceId(), embedding.getId(0)); assertEquals(edge.getId(), embedding.getId(1)); assertEquals(edge.getTargetId(), embedding.getId(2)); assertEquals(PropertyValue.create(1), embedding.getProperty(0)); assertEquals(PropertyValue.create("42"), embedding.getProperty(1)); }