You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2009/11/08 14:28:53 UTC
svn commit: r833870 -
/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java
Author: srowen
Date: Sun Nov 8 13:28:52 2009
New Revision: 833870
URL: http://svn.apache.org/viewvc?rev=833870&view=rev
Log:
Also parallelize LoadEvaluator
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java?rev=833870&r1=833869&r2=833870&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java Sun Nov 8 13:28:52 2009
@@ -27,6 +27,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.concurrent.Callable;
+
+/**
+ * Simple helper class for running load on a Recommender.
+ */
public final class LoadEvaluator {
private static final Logger log = LoggerFactory.getLogger(LoadEvaluator.class);
@@ -42,18 +49,12 @@
LongPrimitiveIterator userSampler =
SamplingLongPrimitiveIterator.maybeWrapIterator(dataModel.getUserIDs(), sampleRate);
RunningAverage recommendationTime = new FullRunningAverageAndStdDev();
- int count = 0;
+ recommender.recommend(userSampler.next(), 10); // Warm up
+ Collection<Callable<Object>> callables = new ArrayList<Callable<Object>>();
while (userSampler.hasNext()) {
- long start = System.currentTimeMillis();
- recommender.recommend(userSampler.next(), 10);
- long end = System.currentTimeMillis();
- if (count > 0) { // Ignore first as a warmup
- recommendationTime.addDatum(end - start);
- }
- if (++count % 100 == 0) {
- logStats(recommendationTime);
- }
+ callables.add(new LoadCallable(recommender, userSampler.next(), recommendationTime));
}
+ AbstractDifferenceRecommenderEvaluator.execute(callables);
logStats(recommendationTime);
}
@@ -65,4 +66,26 @@
}
+ private static class LoadCallable implements Callable<Object> {
+
+ private final Recommender recommender;
+ private final long userID;
+ private final RunningAverage recommendationTime;
+
+ private LoadCallable(Recommender recommender, long userID, RunningAverage recommendationTime) {
+ this.recommender = recommender;
+ this.userID = userID;
+ this.recommendationTime = recommendationTime;
+ }
+
+ @Override
+ public Object call() throws Exception {
+ long start = System.currentTimeMillis();
+ recommender.recommend(userID, 10);
+ long end = System.currentTimeMillis();
+ recommendationTime.addDatum(end - start);
+ return null;
+ }
+ }
+
}
\ No newline at end of file