|
package org.gradoop.examples.sna; |
|
|
|
import org.apache.flink.hadoop.shaded.com.google.common.collect.Lists; |
|
import org.gradoop.common.config.GradoopConfig; |
|
import org.gradoop.common.model.impl.pojo.Edge; |
|
import org.gradoop.common.model.impl.pojo.GraphHead; |
|
import org.gradoop.common.model.impl.pojo.Vertex; |
|
import org.gradoop.examples.AbstractRunner; |
|
import org.gradoop.flink.io.impl.dot.DOTDataSink; |
|
import org.gradoop.flink.model.api.epgm.GraphCollection; |
|
import org.gradoop.flink.model.api.epgm.LogicalGraph; |
|
import org.gradoop.flink.model.impl.operators.combination.ReduceCombination; |
|
import org.gradoop.flink.util.FlinkAsciiGraphLoader; |
|
import org.gradoop.flink.util.GradoopFlinkConfig; |
|
|
|
import java.util.Arrays; |
|
import java.util.Collections; |
|
|
|
import static org.gradoop.flink.model.impl.operators.grouping.Grouping.LABEL_SYMBOL; |
|
|
|
public class AuthorExample extends AbstractRunner { |
|
|
|
private static final String inputGraph = new StringBuilder() |
|
.append("dblp [") |
|
.append("(r:Author { name: 'Rahm' })") |
|
.append("(j:Author { name: 'Junghanns' })") |
|
.append("(g:Author { name: 'Gomez' })") |
|
.append("(p0:Publication { name: 'EPGM'})") |
|
.append("(p1:Publication { name: 'Grouping'})") |
|
.append("(p2:Publication { name: 'Cypher'})") |
|
.append("(r)-[:AUTHOR]->(p0)") |
|
.append("(r)-[:AUTHOR]->(p1)") |
|
.append("(r)-[:AUTHOR]->(p2)") |
|
.append("(j)-[:AUTHOR]->(p0)") |
|
.append("(j)-[:AUTHOR]->(p1)") |
|
.append("(j)-[:AUTHOR]->(p2)") |
|
.append("(g)-[:AUTHOR]->(p0)") |
|
.append("(g)-[:AUTHOR]->(p1)") |
|
.append("]") |
|
.toString(); |
|
|
|
|
|
public static void main(String[] args) throws Exception { |
|
// init |
|
GradoopFlinkConfig config = GradoopFlinkConfig.createConfig(getExecutionEnvironment()); |
|
FlinkAsciiGraphLoader graphLoader = new FlinkAsciiGraphLoader(config); |
|
graphLoader.initDatabaseFromString(inputGraph); |
|
LogicalGraph dblp = graphLoader.getLogicalGraphByVariable("dblp"); |
|
|
|
// Search for co-authors |
|
LogicalGraph coAuthors = dblp |
|
.cypher( |
|
// query pattern |
|
"MATCH (a:Author)-[:AUTHOR]->(p:Publication)<-[:AUTHOR]-(b:Author)", |
|
// construction pattern |
|
"(a)-[new:CO_AUTHOR]->(b)") |
|
.reduce(new ReduceCombination()) |
|
.groupBy( |
|
// vertex grouping keys |
|
Collections.singletonList("name"), |
|
// edge grouping keys |
|
Collections.singletonList(LABEL_SYMBOL)); |
|
|
|
// write output and create PNG image |
|
getExecutionEnvironment().setParallelism(1); |
|
coAuthors.writeTo(new DOTDataSink("coAuthorGraph.dot", false)); |
|
getExecutionEnvironment().execute(); |
|
convertDotToPNG("coAuthorGraph.dot", "coAuthorGraph.png"); |
|
} |
|
} |