Skip to content

Commit 6e8196b

Browse files
committed
Changed DegreeDistribution class hierarchy to support non bucketized distributions
1 parent b1e7be9 commit 6e8196b

File tree

9 files changed

+53
-56
lines changed

9 files changed

+53
-56
lines changed

src/main/java/ldbc/snb/datagen/generator/PersonGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public class PersonGenerator {
2424

2525
public PersonGenerator( Configuration conf, String degreeDistribution ) {
2626
try{
27-
degreeDistribution_ = new DegreeDistribution();
28-
degreeDistribution_.initialize(conf, (BucketedDistribution) Class.forName(degreeDistribution).newInstance());
27+
degreeDistribution_ = (DegreeDistribution)Class.forName(degreeDistribution).newInstance();
28+
degreeDistribution_.initialize(conf);
2929
} catch(ClassNotFoundException e) {
3030
System.out.print(e.getMessage());
3131
} catch(IllegalAccessException e) {

src/main/java/ldbc/snb/datagen/generator/distribution/AltmannDistribution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/**
1111
* Created by aprat on 26/02/15.
1212
*/
13-
public class AltmannDistribution implements BucketedDistribution {
13+
public class AltmannDistribution extends BucketedDistribution {
1414

1515
private int NUM_BUCKETS_ = 100;
1616
private int POPULATION_ = 10000;

src/main/java/ldbc/snb/datagen/generator/distribution/DegreeDistribution.java

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,11 @@
1616
*
1717
* @author aprat
1818
*/
19-
public class DegreeDistribution {
19+
public interface DegreeDistribution {
2020

21-
private ArrayList<Bucket> buckets_;
22-
private ArrayList<Random> randomDegree_;
23-
private Random randomPercentile_;
21+
public void initialize( Configuration conf );
2422

23+
public void reset (long seed);
2524

26-
public void initialize( Configuration conf, BucketedDistribution dist ) {
27-
dist.initialize(conf);
28-
buckets_ = dist.getBuckets();
29-
randomPercentile_ = new Random(0);
30-
randomDegree_ = new ArrayList<Random>();
31-
for (int i = 0; i < buckets_.size(); i++) {
32-
randomDegree_.add(new Random(0));
33-
}
34-
}
35-
36-
public void reset(long seed) {
37-
Random seedRandom = new Random(53223436L + 1234567 * seed);
38-
for (int i = 0; i < buckets_.size(); i++) {
39-
randomDegree_.get(i).setSeed(seedRandom.nextLong());
40-
}
41-
randomPercentile_.setSeed(seedRandom.nextLong());
42-
}
43-
44-
public long nextDegree() {
45-
int idx = randomPercentile_.nextInt(buckets_.size());
46-
int minRange = (int)(buckets_.get(idx).min());
47-
int maxRange = (int)(Math.floor(buckets_.get(idx).max()));
48-
if( maxRange < minRange ) maxRange = minRange;
49-
return randomDegree_.get(idx).nextInt( maxRange - minRange + 1) + minRange;
50-
}
25+
public long nextDegree();
5126
}

src/main/java/ldbc/snb/datagen/generator/distribution/FacebookDegreeDistribution.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
* 2) Randomly select a social degree in the range of that bucket
6161
*/
6262

63-
public class FacebookDegreeDistribution implements BucketedDistribution {
63+
public class FacebookDegreeDistribution extends BucketedDistribution {
6464
private int mean_ = 0;
6565
private static final int FB_MEAN_ = 190;
6666
private static final int BUCKET_NUM_ = 100;
@@ -71,15 +71,12 @@ public FacebookDegreeDistribution() {
7171

7272
@Override
7373
public ArrayList<Bucket> getBuckets() {
74-
return buckets_;
75-
}
76-
77-
public void initialize( Configuration conf) {
7874
mean_ = (int) Math.round(Math.pow(DatagenParams.numPersons, (0.512 - 0.028 * Math.log10(DatagenParams.numPersons))));
7975
System.out.println("Mean = " + mean_);
8076
buckets_ = new ArrayList<Bucket>();
8177
loadFBBuckets();
8278
rebuildBucketRange();
79+
return buckets_;
8380
}
8481

8582
public void loadFBBuckets() {

src/main/java/ldbc/snb/datagen/generator/distribution/GeoDistribution.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,27 @@
55
import ldbc.snb.datagen.generator.distribution.utils.BucketedDistribution;
66
import org.apache.commons.math3.distribution.GeometricDistribution;
77
import org.apache.hadoop.conf.Configuration;
8+
import org.apache.hadoop.hdfs.server.namenode.FSImageFormatProtobuf;
89

910
import java.util.ArrayList;
1011

1112
/**
1213
* Created by aprat on 5/03/15.
1314
*/
14-
public class GeoDistribution implements BucketedDistribution {
15+
public class GeoDistribution implements DegreeDistribution {
1516

16-
private ArrayList<Bucket> buckets_;
1717
private GeometricDistribution geo_;
1818
private double ALPHA_ = 0.12;
1919

20-
@Override
21-
public ArrayList<Bucket> getBuckets() {
22-
return buckets_;
23-
}
24-
25-
@Override
2620
public void initialize(Configuration conf) {
2721
geo_ = new GeometricDistribution(ALPHA_);
22+
}
2823

29-
ArrayList<Double> histogram = new ArrayList<Double>();
30-
for( int i = 1; i <= DatagenParams.numPersons; ++i ) {
31-
histogram.add(DatagenParams.numPersons * geo_.probability(i));
32-
}
24+
public void reset (long seed) {
25+
geo_.reseedRandomGenerator(seed);
26+
}
3327

34-
buckets_ = Bucket.bucketizeHistogram(histogram,100);
28+
public long nextDegree(){
29+
return geo_.sample();
3530
}
3631
}

src/main/java/ldbc/snb/datagen/generator/distribution/MOEZipfDistribution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/**
1111
* Created by aprat on 4/03/15.
1212
*/
13-
public class MOEZipfDistribution implements BucketedDistribution {
13+
public class MOEZipfDistribution extends BucketedDistribution {
1414

1515
private int NUM_BUCKETS_ = 100;
1616
private int POPULATION_ = 10000;

src/main/java/ldbc/snb/datagen/generator/distribution/WeibullDistribution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/**
1212
* Created by aprat on 5/03/15.
1313
*/
14-
public class WeibullDistribution implements BucketedDistribution {
14+
public class WeibullDistribution extends BucketedDistribution {
1515

1616
private ArrayList<Bucket> buckets_;
1717
private org.apache.commons.math3.distribution.WeibullDistribution weibull_;
@@ -29,6 +29,7 @@ public void initialize(Configuration conf) {
2929

3030
ArrayList<Double> histogram = new ArrayList<Double>();
3131
for( int i = 1; i <= DatagenParams.numPersons; ++i ) {
32+
System.out.println(weibull_.probability(i));
3233
histogram.add(DatagenParams.numPersons * weibull_.probability(i));
3334
}
3435

src/main/java/ldbc/snb/datagen/generator/distribution/ZetaDistribution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/**
1212
* Created by aprat on 5/03/15.
1313
*/
14-
public class ZetaDistribution implements BucketedDistribution {
14+
public class ZetaDistribution extends BucketedDistribution {
1515

1616
private ArrayList<Bucket> buckets_;
1717
private ZipfDistribution zipf_;
Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,44 @@
11
package ldbc.snb.datagen.generator.distribution.utils;
22

3+
import ldbc.snb.datagen.generator.distribution.DegreeDistribution;
34
import org.apache.hadoop.conf.Configuration;
45

56
import java.util.ArrayList;
7+
import java.util.Random;
68

79
/**
810
* Created by aprat on 3/03/15.
911
*/
10-
public interface BucketedDistribution {
12+
public abstract class BucketedDistribution implements DegreeDistribution {
1113

12-
public ArrayList<Bucket> getBuckets();
14+
private ArrayList<Bucket> buckets_;
15+
private ArrayList<Random> randomDegree_;
16+
private Random randomPercentile_;
1317

14-
public void initialize( Configuration conf );
18+
public abstract ArrayList<Bucket> getBuckets();
19+
20+
public void initialize( Configuration conf ) {
21+
buckets_ = this.getBuckets();
22+
randomPercentile_ = new Random(0);
23+
randomDegree_ = new ArrayList<Random>();
24+
for (int i = 0; i < buckets_.size(); i++) {
25+
randomDegree_.add(new Random(0));
26+
}
27+
};
28+
29+
public void reset(long seed) {
30+
Random seedRandom = new Random(53223436L + 1234567 * seed);
31+
for (int i = 0; i < buckets_.size(); i++) {
32+
randomDegree_.get(i).setSeed(seedRandom.nextLong());
33+
}
34+
randomPercentile_.setSeed(seedRandom.nextLong());
35+
}
36+
37+
public long nextDegree() {
38+
int idx = randomPercentile_.nextInt(buckets_.size());
39+
int minRange = (int)(buckets_.get(idx).min());
40+
int maxRange = (int)(Math.floor(buckets_.get(idx).max()));
41+
if( maxRange < minRange ) maxRange = minRange;
42+
return randomDegree_.get(idx).nextInt( maxRange - minRange + 1) + minRange;
43+
}
1544
}

0 commit comments

Comments
 (0)