@Override LogicalGraph applyGrouping(LogicalGraph graph, List<String> groupingKeys) { return graph.groupBy(vertexGroupingKeys, vertexAggregateFunctions, groupingKeys, edgeAggregateFunctions, strategy); }
/** * {@inheritDoc} */ @Override public LogicalGraph groupBy(List<String> vertexGroupingKeys, List<String> edgeGroupingKeys) { return groupBy(vertexGroupingKeys, null, edgeGroupingKeys, null, GroupingStrategy.GROUP_REDUCE); }
/** * {@inheritDoc} */ @Override public LogicalGraph groupBy(List<String> vertexGroupingKeys) { return groupBy(vertexGroupingKeys, null); }
@Override LogicalGraph applyGrouping(LogicalGraph graph, List<String> groupingKeys) { return graph.groupBy(groupingKeys, vertexAggregateFunctions, edgeGroupingKeys, edgeAggregateFunctions, strategy); }
@Override LogicalGraph applyGrouping(LogicalGraph graph, List<String> groupingKeys) { return graph.groupBy(vertexGroupingKeys, vertexAggregateFunctions, groupingKeys, edgeAggregateFunctions, strategy); }
@Override LogicalGraph applyGrouping(LogicalGraph graph, List<String> groupingKeys) { return graph.groupBy(groupingKeys, vertexAggregateFunctions, edgeGroupingKeys, edgeAggregateFunctions, strategy); }
@Override public LogicalGraph groupBy(List<String> vertexGroupingKeys) { return groupBy(vertexGroupingKeys, null); }
/** * The actual computation. * * @param socialNetwork social network graph * @return summarized, aggregated graph */ private static LogicalGraph execute(LogicalGraph socialNetwork) { return socialNetwork .subgraph( vertex -> vertex.getLabel().equals("Person"), edge -> edge.getLabel().equals("knows")) .groupBy(Arrays.asList("gender", "city")) .aggregate(new VertexCount(), new EdgeCount()); }
@Override public LogicalGraph groupBy( List<String> vertexGroupingKeys, List<AggregateFunction> vertexAggregateFunctions, List<String> edgeGroupingKeys, List<AggregateFunction> edgeAggregateFunctions, GroupingStrategy groupingStrategy) { Objects.requireNonNull(vertexGroupingKeys, "missing vertex grouping key(s)"); Objects.requireNonNull(groupingStrategy, "missing vertex grouping strategy"); Grouping.GroupingBuilder builder = new Grouping.GroupingBuilder(); builder.addVertexGroupingKeys(vertexGroupingKeys); builder.setStrategy(groupingStrategy); if (edgeGroupingKeys != null) { builder.addEdgeGroupingKeys(edgeGroupingKeys); } if (vertexAggregateFunctions != null) { vertexAggregateFunctions.forEach(builder::addVertexAggregateFunction); } if (edgeAggregateFunctions != null) { edgeAggregateFunctions.forEach(builder::addEdgeAggregateFunction); } return callForGraph(builder.build()); }
.groupBy(singletonList(Grouping.LABEL_SYMBOL), singletonList(Grouping.LABEL_SYMBOL));
LogicalGraph schema = graph.groupBy(singletonList(LABEL_SYMBOL), singletonList(LABEL_SYMBOL));
LogicalGraph communities = graph.groupBy(singletonList(communityKey), // vertex grouping keys singletonList(new Count("count")), // vertex aggregate functions
LogicalGraph summary = transformed.groupBy( Collections.singletonList("decade"), Arrays.asList(
.groupBy(Lists.newArrayList(city, gender))
@Test public void testAPIFunction() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(pL:Person {city : \"Leipzig\", count : 2L})" + "(pD:Person {city : \"Dresden\", count : 3L})" + "(pB:Person {city : \"Berlin\", count : 1L})" + "(pD)-[:knows {since : 2014, count : 2L}]->(pD)" + "(pD)-[:knows {since : 2013, count : 2L}]->(pL)" + "(pD)-[:knows {since : 2015, count : 1L}]->(pL)" + "(pL)-[:knows {since : 2014, count : 2L}]->(pL)" + "(pL)-[:knows {since : 2013, count : 1L}]->(pD)" + "(pB)-[:knows {since : 2015, count : 2L}]->(pD)" + "]"); LogicalGraph output = input.groupBy( Arrays.asList(Grouping.LABEL_SYMBOL, "city"), Arrays.asList(new Count("count")), Arrays.asList(Grouping.LABEL_SYMBOL, "since"), Arrays.asList(new Count("count")), getStrategy() ); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }