Author: srowen
Date: Wed Jun 1 16:36:31 2011
New Revision: 1130213
URL: http://svn.apache.org/viewvc?rev=1130213&view=rev
Log:
MAHOUT-687 related change, avoid static RNG instances, and force setSeed() to
work by making a new RNG
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/hadoop/als/ParallelALSFactorizationJob.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
mahout/trunk/math/src/main/java/org/apache/mahout/common/RandomWrapper.java
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/hadoop/als/ParallelALSFactorizationJob.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/hadoop/als/ParallelALSFactorizationJob.java?rev=1130213&r1=1130212&r2=1130213&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/hadoop/als/ParallelALSFactorizationJob.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/hadoop/als/ParallelALSFactorizationJob.java
Wed Jun 1 16:36:31 2011
@@ -275,7 +275,7 @@ public class ParallelALSFactorizationJob
extends
Reducer<VarLongWritable,FloatWritable,VarIntWritable,FeatureVectorWithRatingWritable>
{
private int numFeatures;
- private static final Random random = RandomUtils.getRandom();
+ private final Random random = RandomUtils.getRandom();
@Override
protected void setup(Context ctx) throws IOException, InterruptedException
{
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java?rev=1130213&r1=1130212&r2=1130213&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
Wed Jun 1 16:36:31 2011
@@ -28,14 +28,14 @@ import org.apache.mahout.common.RandomUt
*/
public final class SamplingLongPrimitiveIterator extends
AbstractLongPrimitiveIterator {
- private static final Random RANDOM = RandomUtils.getRandom();
-
+ private final Random random;
private final LongPrimitiveIterator delegate;
private final double samplingRate;
private long next;
private boolean hasNext;
public SamplingLongPrimitiveIterator(LongPrimitiveIterator delegate, double
samplingRate) {
+ random = RandomUtils.getRandom();
this.delegate = delegate;
this.samplingRate = samplingRate;
this.hasNext = true;
@@ -67,7 +67,7 @@ public final class SamplingLongPrimitive
private void doNext() {
int toSkip = 0;
- while (SamplingLongPrimitiveIterator.RANDOM.nextDouble() >= samplingRate) {
+ while (random.nextDouble() >= samplingRate) {
toSkip++;
}
// Really, would be nicer to select value from geometric distribution, for
small values of samplingRate
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java?rev=1130213&r1=1130212&r2=1130213&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
Wed Jun 1 16:36:31 2011
@@ -65,8 +65,8 @@ public final class TreeClusteringRecomme
private static final Logger log =
LoggerFactory.getLogger(TreeClusteringRecommender.class);
private static final FastIDSet[] NO_CLUSTERS = new FastIDSet[0];
- private static final Random RANDOM = RandomUtils.getRandom();
-
+
+ private final Random random;
private final ClusterSimilarity clusterSimilarity;
private final int numClusters;
private final double clusteringThreshold;
@@ -115,6 +115,7 @@ public final class TreeClusteringRecomme
Preconditions.checkArgument(numClusters >= 2, "numClusters must be at
least 2");
Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0,
"samplingRate is invalid: %f", samplingRate);
+ random = RandomUtils.getRandom();
this.clusterSimilarity = clusterSimilarity;
this.numClusters = numClusters;
this.clusteringThreshold = Double.NaN;
@@ -172,6 +173,7 @@ public final class TreeClusteringRecomme
Preconditions.checkArgument(clusterSimilarity != null, "clusterSimilarity
is null");
Preconditions.checkArgument(!Double.isNaN(clusteringThreshold),
"clusteringThreshold must not be NaN");
Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0,
"samplingRate is invalid: %f", samplingRate);
+ random = RandomUtils.getRandom();
this.clusterSimilarity = clusterSimilarity;
this.numClusters = Integer.MIN_VALUE;
this.clusteringThreshold = clusteringThreshold;
@@ -324,7 +326,7 @@ public final class TreeClusteringRecomme
for (int i = 0; i < size; i++) {
FastIDSet cluster1 = clusters.get(i);
for (int j = i + 1; j < size; j++) {
- if (samplingRate >= 1.0 || RANDOM.nextDouble() < samplingRate) {
+ if (samplingRate >= 1.0 || random.nextDouble() < samplingRate) {
FastIDSet cluster2 = clusters.get(j);
double similarity = clusterSimilarity.getSimilarity(cluster1,
cluster2);
if (!Double.isNaN(similarity) && similarity > bestSimilarity) {
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java?rev=1130213&r1=1130212&r2=1130213&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
Wed Jun 1 16:36:31 2011
@@ -30,12 +30,12 @@ import org.apache.mahout.common.RandomUt
*/
public final class SamplingIterator<T> extends AbstractIterator<T> {
- private static final Random RANDOM = RandomUtils.getRandom();
-
+ private final Random random;
private final Iterator<? extends T> delegate;
private final double samplingRate;
public SamplingIterator(Iterator<? extends T> delegate, double samplingRate)
{
+ random = RandomUtils.getRandom();
this.delegate = delegate;
this.samplingRate = samplingRate;
}
@@ -45,7 +45,7 @@ public final class SamplingIterator<T> e
if (delegate instanceof SkippingIterator<?>) {
SkippingIterator<? extends T> skippingDelegate = (SkippingIterator<?
extends T>) delegate;
int toSkip = 0;
- while (RANDOM.nextDouble() >= samplingRate) {
+ while (random.nextDouble() >= samplingRate) {
toSkip++;
}
// Really, would be nicer to select value from geometric distribution,
for small values of samplingRate
@@ -58,7 +58,7 @@ public final class SamplingIterator<T> e
} else {
while (delegate.hasNext()) {
T delegateNext = delegate.next();
- if (RANDOM.nextDouble() < samplingRate) {
+ if (random.nextDouble() < samplingRate) {
return delegateNext;
}
}
Modified:
mahout/trunk/math/src/main/java/org/apache/mahout/common/RandomWrapper.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/common/RandomWrapper.java?rev=1130213&r1=1130212&r2=1130213&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/common/RandomWrapper.java
(original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/common/RandomWrapper.java
Wed Jun 1 16:36:31 2011
@@ -83,9 +83,7 @@ public final class RandomWrapper extends
// Since this will be called by the java.util.Random() constructor before
we construct
// the delegate... and because we don't actually care about the result of
this for our
// purpose:
- if (random != null) {
- random.setSeed(seed);
- }
+ random = new MersenneTwisterRNG(RandomUtils.longSeedtoBytes(seed));
}
@Override