Skip to content

Instantly share code, notes, and snippets.

@s1ck
Created May 12, 2018 11:21
Show Gist options
  • Save s1ck/2f68b221c953a58cfa483bb2f4835483 to your computer and use it in GitHub Desktop.
Save s1ck/2f68b221c953a58cfa483bb2f4835483 to your computer and use it in GitHub Desktop.
Author-Publication-Graph to CoAuthor-Graph Example
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");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment