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


Reply via email to