[ https://issues.apache.org/jira/browse/FLINK-2909?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15232207#comment-15232207 ]
ASF GitHub Bot commented on FLINK-2909: --------------------------------------- Github user vasia commented on a diff in the pull request: https://github.com/apache/flink/pull/1807#discussion_r59027355 --- Diff: docs/apis/batch/libs/gelly.md --- @@ -1734,3 +1734,547 @@ vertex represents a group of vertices and each edge represents a group of edges vertex and edge in the output graph stores the common group value and the number of represented elements. {% top %} + +Graph Generators +----------- + +Gelly provides a collection of scalable graph generators. Each generator is + +* parallelizable, in order to create large datasets +* scale-free, generating the same graph regardless of parallelism +* thrifty, using as few operators as possible + +### Complete Graph + +An undirected graph connecting every distinct pair of vertices. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new CompleteGraph(env, 5) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.CompleteGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +val graph = new CompleteGraph(env.getJavaEnv, 5).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="540" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <line x1="270" y1="40" x2="489" y2="199" /> + <line x1="270" y1="40" x2="405" y2="456" /> + <line x1="270" y1="40" x2="135" y2="456" /> + <line x1="270" y1="40" x2="51" y2="199" /> + + <line x1="489" y1="199" x2="405" y2="456" /> + <line x1="489" y1="199" x2="135" y2="456" /> + <line x1="489" y1="199" x2="51" y2="199" /> + + <line x1="405" y1="456" x2="135" y2="456" /> + <line x1="405" y1="456" x2="51" y2="199" /> + + <line x1="135" y1="456" x2="51" y2="199" /> + + <circle cx="270" cy="40" r="20" /> + <text x="270" y="40">0</text> + + <circle cx="489" cy="199" r="20" /> + <text x="489" y="199">1</text> + + <circle cx="405" cy="456" r="20" /> + <text x="405" y="456">2</text> + + <circle cx="135" cy="456" r="20" /> + <text x="135" y="456">3</text> + + <circle cx="51" cy="199" r="20" /> + <text x="51" y="199">4</text> +</svg> + +### Cycle Graph + +An undirected graph where all edges form a single cycle. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new CycleGraph(env, 5) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.CycleGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +val graph = new CycleGraph(env.getJavaEnv, 5).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="540" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <line x1="270" y1="40" x2="489" y2="199" /> + <line x1="489" y1="199" x2="405" y2="456" /> + <line x1="405" y1="456" x2="135" y2="456" /> + <line x1="135" y1="456" x2="51" y2="199" /> + <line x1="51" y1="199" x2="270" y2="40" /> + + <circle cx="270" cy="40" r="20" /> + <text x="270" y="40">0</text> + + <circle cx="489" cy="199" r="20" /> + <text x="489" y="199">1</text> + + <circle cx="405" cy="456" r="20" /> + <text x="405" y="456">2</text> + + <circle cx="135" cy="456" r="20" /> + <text x="135" y="456">3</text> + + <circle cx="51" cy="199" r="20" /> + <text x="51" y="199">4</text> +</svg> + +### Empty Graph + +The graph containing no edges. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new EmptyGraph(env, 5) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.EmptyGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +val graph = new EmptyGraph(env.getJavaEnv, 5).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="80" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <circle cx="30" cy="40" r="20" /> + <text x="30" y="40">0</text> + + <circle cx="150" cy="40" r="20" /> + <text x="150" y="40">1</text> + + <circle cx="270" cy="40" r="20" /> + <text x="270" y="40">2</text> + + <circle cx="390" cy="40" r="20" /> + <text x="390" y="40">3</text> + + <circle cx="510" cy="40" r="20" /> + <text x="510" y="40">4</text> +</svg> + +### Grid Graph + +An undirected graph connecting vertices in a regular tiling in one or more dimensions. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new GridGraph(env) + .addDimension(2, false) + .addDimension(4, false) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.GridGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +val graph = new GridGraph(env.getJavaEnv).addDimension(2, false).addDimension(4, false).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="200" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <line x1="30" y1="40" x2="510" y2="40" /> + <line x1="30" y1="160" x2="510" y2="160" /> + + <line x1="30" y1="40" x2="30" y2="160" /> + <line x1="190" y1="40" x2="190" y2="160" /> + <line x1="350" y1="40" x2="350" y2="160" /> + <line x1="510" y1="40" x2="510" y2="160" /> + + <circle cx="30" cy="40" r="20" /> + <text x="30" y="40">0</text> + + <circle cx="190" cy="40" r="20" /> + <text x="190" y="40">1</text> + + <circle cx="350" cy="40" r="20" /> + <text x="350" y="40">2</text> + + <circle cx="510" cy="40" r="20" /> + <text x="510" y="40">3</text> + + <circle cx="30" cy="160" r="20" /> + <text x="30" y="160">4</text> + + <circle cx="190" cy="160" r="20" /> + <text x="190" y="160">5</text> + + <circle cx="350" cy="160" r="20" /> + <text x="350" y="160">6</text> + + <circle cx="510" cy="160" r="20" /> + <text x="510" y="160">7</text> +</svg> + +### Hypercube Graph + +An undirected graph where edges form an n-dimensional hypercube. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new HypercubeGraph(env, 2) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.HypercubeGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +// note: configured with the number of vertex pairs +val graph = new HypercubeGraph(env.getJavaEnv, 4).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="320" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <line x1="190" y1="120" x2="350" y2="120" /> + <line x1="190" y1="200" x2="350" y2="200" /> + <line x1="190" y1="120" x2="190" y2="200" /> + <line x1="350" y1="120" x2="350" y2="200" /> + + <line x1="30" y1="40" x2="510" y2="40" /> + <line x1="30" y1="280" x2="510" y2="280" /> + <line x1="30" y1="40" x2="30" y2="280" /> + <line x1="510" y1="40" x2="510" y2="280" /> + + <line x1="190" y1="120" x2="30" y2="40" /> + <line x1="350" y1="120" x2="510" y2="40" /> + <line x1="190" y1="200" x2="30" y2="280" /> + <line x1="350" y1="200" x2="510" y2="280" /> + + <circle cx="190" cy="120" r="20" /> + <text x="190" y="120">0</text> + + <circle cx="350" cy="120" r="20" /> + <text x="350" y="120">1</text> + + <circle cx="190" cy="200" r="20" /> + <text x="190" y="200">2</text> + + <circle cx="350" cy="200" r="20" /> + <text x="350" y="200">3</text> + + <circle cx="30" cy="40" r="20" /> + <text x="30" y="40">4</text> + + <circle cx="510" cy="40" r="20" /> + <text x="510" y="40">5</text> + + <circle cx="30" cy="280" r="20" /> + <text x="30" y="280">6</text> + + <circle cx="510" cy="280" r="20" /> + <text x="510" y="280">7</text> +</svg> + +### Path Graph + +An undirected Graph where all edges form a single path. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +Graph<LongValue,NullValue,NullValue> graph = new PathGraph(env, 5) + .generate(); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +import org.apache.flink.api.scala._ +import org.apache.flink.graph.generator.PathGraph + +val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment + +val graph = new PathGraph(env.getJavaEnv, 5).generate() +{% endhighlight %} +</div> +</div> + +<svg class="graph" width="540" height="80" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + + <line x1="30" y1="40" x2="510" y2="40" /> + + <circle cx="30" cy="40" r="20" /> + <text x="30" y="40">0</text> + + <circle cx="150" cy="40" r="20" /> + <text x="150" y="40">1</text> + + <circle cx="270" cy="40" r="20" /> + <text x="270" y="40">2</text> + + <circle cx="390" cy="40" r="20" /> + <text x="390" y="40">3</text> + + <circle cx="510" cy="40" r="20" /> + <text x="510" y="40">4</text> +</svg> + +### RMat Graph + +A directed or undirected power-law graph generated using the [Recursive Matrix (R-Mat)] +(http://www.cs.cmu.edu/~christos/PUBLICATIONS/siam04.pdf) model. RMat is a stochastic +generator configured with a source of randomness. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + +RandomGenerableFactory<JDKRandomGenerator> rnd = new JDKRandomGeneratorFactory(); + --- End diff -- Can we explain what is the `JDKRandomGenerator ` and what parameters the `RMatGraph` takes? > Gelly Graph Generators > ---------------------- > > Key: FLINK-2909 > URL: https://issues.apache.org/jira/browse/FLINK-2909 > Project: Flink > Issue Type: New Feature > Components: Gelly > Affects Versions: 1.0.0 > Reporter: Greg Hogan > Assignee: Greg Hogan > > Include a selection of graph generators in Gelly. Generated graphs will be > useful for performing scalability, stress, and regression testing as well as > benchmarking and comparing algorithms, for both Flink users and developers. > Generated data is infinitely scalable yet described by a few simple > parameters and can often substitute for user data or sharing large files when > reporting issues. > There are at multiple categories of graphs as documented by > [NetworkX|https://networkx.github.io/documentation/latest/reference/generators.html] > and elsewhere. > Graphs may be a well-defined, i.e. the [Chvátal > graph|https://en.wikipedia.org/wiki/Chv%C3%A1tal_graph]. These may be > sufficiently small to populate locally. > Graphs may be scalable, i.e. complete and star graphs. These should use > Flink's distributed parallelism. > Graphs may be stochastic, i.e. [RMat > graphs|http://snap.stanford.edu/class/cs224w-readings/chakrabarti04rmat.pdf] > . A key consideration is that the graphs should source randomness from a > seedable PRNG and generate the same Graph regardless of parallelism. -- This message was sent by Atlassian JIRA (v6.3.4#6332)