From 16385984ae25e23309d3c5de7cf106a520a4a88d Mon Sep 17 00:00:00 2001 From: Ankur Dave Date: Wed, 17 Sep 2014 16:14:35 -0700 Subject: [PATCH 1/4] Round down in sampleLogNormal to guarantee upper bound --- .../scala/org/apache/spark/graphx/util/GraphGenerators.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala index b8309289fe47..8a13c7422154 100644 --- a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala +++ b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala @@ -118,7 +118,7 @@ object GraphGenerators { val Z = rand.nextGaussian() X = math.exp(mu + sigma*Z) } - math.round(X.toFloat) + math.floor(X).toInt } /** From 6fd5fb1ac144abba4ac2642a5ebb02f6ce45ea79 Mon Sep 17 00:00:00 2001 From: Ankur Dave Date: Fri, 19 Sep 2014 23:33:27 -0700 Subject: [PATCH 2/4] Run sampleLogNormal bounds check 1000 times This adds about 150 ms to the test duration. --- .../apache/spark/graphx/util/GraphGeneratorsSuite.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/graphx/src/test/scala/org/apache/spark/graphx/util/GraphGeneratorsSuite.scala b/graphx/src/test/scala/org/apache/spark/graphx/util/GraphGeneratorsSuite.scala index b346d4db2ef9..3abefbe52fa8 100644 --- a/graphx/src/test/scala/org/apache/spark/graphx/util/GraphGeneratorsSuite.scala +++ b/graphx/src/test/scala/org/apache/spark/graphx/util/GraphGeneratorsSuite.scala @@ -64,8 +64,11 @@ class GraphGeneratorsSuite extends FunSuite with LocalSparkContext { val sigma = 1.3 val maxVal = 100 - val dstId = GraphGenerators.sampleLogNormal(mu, sigma, maxVal) - assert(dstId < maxVal) + val trials = 1000 + for (i <- 1 to trials) { + val dstId = GraphGenerators.sampleLogNormal(mu, sigma, maxVal) + assert(dstId < maxVal) + } val dstId_round1 = GraphGenerators.sampleLogNormal(mu, sigma, maxVal, 12345) val dstId_round2 = GraphGenerators.sampleLogNormal(mu, sigma, maxVal, 12345) From 5900c222dab367910a925ba0bc182ca3724a23cd Mon Sep 17 00:00:00 2001 From: Ankur Dave Date: Fri, 19 Sep 2014 23:37:48 -0700 Subject: [PATCH 3/4] Round X in loop condition --- .../org/apache/spark/graphx/util/GraphGenerators.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala index 8a13c7422154..919c87839fcd 100644 --- a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala +++ b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala @@ -114,13 +114,15 @@ object GraphGenerators { // Z ~ N(0, 1) var X: Double = maxVal - while (X >= maxVal) { + while (round(X) >= maxVal) { val Z = rand.nextGaussian() X = math.exp(mu + sigma*Z) } - math.floor(X).toInt + round(X) } + private def round(x: Double): Int = math.round(x.toFloat) + /** * A random graph generator using the R-MAT model, proposed in * "R-MAT: A Recursive Model for Graph Mining" by Chakrabarti et al. From f6655e57fb15be7ef8be3c644f4de7a04650bf60 Mon Sep 17 00:00:00 2001 From: Ankur Dave Date: Mon, 22 Sep 2014 11:48:33 -0700 Subject: [PATCH 4/4] Go back to math.floor This reverts commit 5900c222dab367910a925ba0bc182ca3724a23cd. --- .../org/apache/spark/graphx/util/GraphGenerators.scala | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala index 919c87839fcd..8a13c7422154 100644 --- a/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala +++ b/graphx/src/main/scala/org/apache/spark/graphx/util/GraphGenerators.scala @@ -114,15 +114,13 @@ object GraphGenerators { // Z ~ N(0, 1) var X: Double = maxVal - while (round(X) >= maxVal) { + while (X >= maxVal) { val Z = rand.nextGaussian() X = math.exp(mu + sigma*Z) } - round(X) + math.floor(X).toInt } - private def round(x: Double): Int = math.round(x.toFloat) - /** * A random graph generator using the R-MAT model, proposed in * "R-MAT: A Recursive Model for Graph Mining" by Chakrabarti et al.