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 2010/03/18 19:15:16 UTC
svn commit: r924930 - in /lucene/mahout/trunk/core/src:
main/java/org/apache/mahout/cf/taste/impl/model/file/
main/java/org/apache/mahout/cf/taste/impl/similarity/
main/java/org/apache/mahout/cf/taste/impl/transforms/
main/java/org/apache/mahout/common...
Author: srowen
Date: Thu Mar 18 18:15:16 2010
New Revision: 924930
URL: http://svn.apache.org/viewvc?rev=924930&view=rev
Log:
On the subject of recent notes about MutableLong et al, why not standardize on this for cases where we need a mutable object primitive
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java
lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java Thu Mar 18 18:15:16 2010
@@ -26,9 +26,9 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.lang.mutable.MutableInt;
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.FastByIDMap;
@@ -313,18 +313,17 @@ public class FileDataModel extends Abstr
FastByIDMap<?> data,
boolean fromPriorData) {
log.info("Reading file info...");
- AtomicInteger count = new AtomicInteger();
+ int count = 0;
while (dataOrUpdateFileIterator.hasNext()) {
String line = dataOrUpdateFileIterator.next();
if (line.length() > 0) {
processLine(line, data, fromPriorData);
- int currentCount = count.incrementAndGet();
- if (currentCount % 1000000 == 0) {
- log.info("Processed {} lines", currentCount);
+ if (++count % 1000000 == 0) {
+ log.info("Processed {} lines", count);
}
}
}
- log.info("Read lines: {}", count.get());
+ log.info("Read lines: {}", count);
}
/**
@@ -492,18 +491,17 @@ public class FileDataModel extends Abstr
protected void processFileWithoutID(FileLineIterator dataOrUpdateFileIterator, FastByIDMap<FastIDSet> data) {
log.info("Reading file info...");
- AtomicInteger count = new AtomicInteger();
+ int count = 0;
while (dataOrUpdateFileIterator.hasNext()) {
String line = dataOrUpdateFileIterator.next();
if (line.length() > 0) {
processLineWithoutID(line, data);
- int currentCount = count.incrementAndGet();
- if (currentCount % 100000 == 0) {
- log.info("Processed {} lines", currentCount);
+ if (++count % 100000 == 0) {
+ log.info("Processed {} lines", count);
}
}
}
- log.info("Read lines: {}", count.get());
+ log.info("Read lines: {}", count);
}
protected void processLineWithoutID(String line, FastByIDMap<FastIDSet> data) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java Thu Mar 18 18:15:16 2010
@@ -59,9 +59,10 @@ public final class LogLikelihoodSimilari
return Double.NaN;
}
int numItems = dataModel.getNumItems();
- double logLikelihood = twoLogLambda(intersectionSize, prefs1Size
- - intersectionSize,
- prefs2Size, numItems - prefs2Size);
+ double logLikelihood = twoLogLambda(intersectionSize,
+ prefs1Size - intersectionSize,
+ prefs2Size,
+ numItems - prefs2Size);
return 1.0 - 1.0 / (1.0 + logLikelihood);
}
@@ -74,9 +75,10 @@ public final class LogLikelihoodSimilari
int preferring1 = dataModel.getNumUsersWithPreferenceFor(itemID1);
int preferring2 = dataModel.getNumUsersWithPreferenceFor(itemID2);
int numUsers = dataModel.getNumUsers();
- double logLikelihood = twoLogLambda(preferring1and2, preferring1
- - preferring1and2,
- preferring2, numUsers - preferring2);
+ double logLikelihood = twoLogLambda(preferring1and2,
+ preferring1 - preferring1and2,
+ preferring2,
+ numUsers - preferring2);
return 1.0 - 1.0 / (1.0 + logLikelihood);
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java Thu Mar 18 18:15:16 2010
@@ -20,7 +20,6 @@ package org.apache.mahout.cf.taste.impl.
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.Callable;
-import java.util.concurrent.atomic.AtomicReference;
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
@@ -55,7 +54,7 @@ public final class InverseUserFrequency
private final DataModel dataModel;
private final RefreshHelper refreshHelper;
private final double logBase;
- private final AtomicReference<FastByIDMap<Double>> iufFactors;
+ private FastByIDMap<Double> iufFactors;
/**
* <p>
@@ -78,7 +77,7 @@ public final class InverseUserFrequency
}
this.dataModel = dataModel;
this.logBase = logBase;
- this.iufFactors = new AtomicReference<FastByIDMap<Double>>(new FastByIDMap<Double>());
+ this.iufFactors = new FastByIDMap<Double>();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
@Override
public Object call() throws TasteException {
@@ -97,7 +96,7 @@ public final class InverseUserFrequency
@Override
public float getTransformedValue(Preference pref) {
- Double factor = iufFactors.get().get(pref.getItemID());
+ Double factor = iufFactors.get(pref.getItemID());
if (factor != null) {
return (float) (pref.getValue() * factor);
}
@@ -127,7 +126,7 @@ public final class InverseUserFrequency
newIufFactors.put(entry.getKey(), Math.log((double) numUsers / (double) entry.getValue()[0])
/ logFactor);
}
- iufFactors.set(newIufFactors);
+ iufFactors = newIufFactors;
}
@Override
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java Thu Mar 18 18:15:16 2010
@@ -25,15 +25,15 @@ import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicLong;
+import org.apache.commons.lang.mutable.MutableLong;
import org.apache.mahout.common.Pair;
public class LFUCache<K,V> implements Cache<K,V> {
private final SortedMap<Long,Set<K>> evictionMap;
- private final Map<K,Pair<V,AtomicLong>> dataMap;
+ private final Map<K,Pair<V, MutableLong>> dataMap;
private final int capacity;
@@ -43,7 +43,7 @@ public class LFUCache<K,V> implements Ca
this.capacity = capacity;
evictionMap = new TreeMap<Long,Set<K>>();
- dataMap = new HashMap<K,Pair<V,AtomicLong>>(capacity);
+ dataMap = new HashMap<K,Pair<V,MutableLong>>(capacity);
}
@Override
@@ -57,13 +57,14 @@ public class LFUCache<K,V> implements Ca
@Override
public V get(K key) {
- Pair<V,AtomicLong> data = dataMap.get(key);
+ Pair<V,MutableLong> data = dataMap.get(key);
if (data == null) {
return null;
} else {
V value = data.getFirst();
- AtomicLong count = data.getSecond();
- long oldCount = count.getAndIncrement();
+ MutableLong count = data.getSecond();
+ long oldCount = count.longValue();
+ count.increment();
incrementHit(key, oldCount);
return value;
}
@@ -71,7 +72,7 @@ public class LFUCache<K,V> implements Ca
}
public V quickGet(K key) {
- Pair<V,AtomicLong> data = dataMap.get(key);
+ Pair<V,MutableLong> data = dataMap.get(key);
if (data == null) {
return null;
} else {
@@ -108,8 +109,8 @@ public class LFUCache<K,V> implements Ca
{
removeLeastFrequent();
}
- AtomicLong count = new AtomicLong(1L);
- Pair<V,AtomicLong> data = new Pair<V,AtomicLong>(value, count);
+ MutableLong count = new MutableLong(1L);
+ Pair<V,MutableLong> data = new Pair<V,MutableLong>(value, count);
dataMap.put(key, data);
Long countKey = 1L;
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java Thu Mar 18 18:15:16 2010
@@ -17,6 +17,7 @@
package org.apache.mahout.cf.taste.impl.model.file;
+import org.apache.commons.lang.mutable.MutableBoolean;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
@@ -37,7 +38,6 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.NoSuchElementException;
-import java.util.concurrent.atomic.AtomicBoolean;
/** <p>Tests {@link FileDataModel}.</p> */
public final class FileDataModelTest extends TasteTestCase {
@@ -169,13 +169,13 @@ public final class FileDataModelTest ext
}
public void testRefresh() throws Exception {
- final AtomicBoolean initialized = new AtomicBoolean(false);
+ final MutableBoolean initialized = new MutableBoolean(false);
Runnable initializer = new Runnable() {
@Override
public void run() {
try {
model.getNumUsers();
- initialized.set(true);
+ initialized.setValue(true);
} catch (TasteException te) {
// oops
}
@@ -184,7 +184,7 @@ public final class FileDataModelTest ext
new Thread(initializer).start();
Thread.sleep(1000L); // wait a second for thread to start and call getNumUsers()
model.getNumUsers(); // should block
- assertTrue(initialized.get());
+ assertTrue(initialized.booleanValue());
assertEquals(4, model.getNumUsers());
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java Thu Mar 18 18:15:16 2010
@@ -17,61 +17,60 @@
package org.apache.mahout.cf.taste.impl.recommender;
+import org.apache.commons.lang.mutable.MutableInt;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
import org.apache.mahout.cf.taste.recommender.IDRescorer;
import org.apache.mahout.cf.taste.recommender.Recommender;
-import java.util.concurrent.atomic.AtomicInteger;
-
/** <p>Tests {@link CachingRecommender}.</p> */
public final class CachingRecommenderTest extends TasteTestCase {
public void testRecommender() throws Exception {
- AtomicInteger recommendCount = new AtomicInteger();
+ MutableInt recommendCount = new MutableInt();
Recommender mockRecommender = new MockRecommender(recommendCount);
Recommender cachingRecommender = new CachingRecommender(mockRecommender);
cachingRecommender.recommend(1, 1);
- assertEquals(1, recommendCount.get());
+ assertEquals(1, recommendCount.intValue());
cachingRecommender.recommend(2, 1);
- assertEquals(2, recommendCount.get());
+ assertEquals(2, recommendCount.intValue());
cachingRecommender.recommend(1, 1);
- assertEquals(2, recommendCount.get());
+ assertEquals(2, recommendCount.intValue());
cachingRecommender.recommend(2, 1);
- assertEquals(2, recommendCount.get());
+ assertEquals(2, recommendCount.intValue());
cachingRecommender.refresh(null);
cachingRecommender.recommend(1, 1);
- assertEquals(3, recommendCount.get());
+ assertEquals(3, recommendCount.intValue());
cachingRecommender.recommend(2, 1);
- assertEquals(4, recommendCount.get());
+ assertEquals(4, recommendCount.intValue());
cachingRecommender.recommend(3, 1);
- assertEquals(5, recommendCount.get());
+ assertEquals(5, recommendCount.intValue());
// Results from this recommend() method can be cached...
IDRescorer rescorer = NullRescorer.getItemInstance();
cachingRecommender.refresh(null);
cachingRecommender.recommend(1, 1, rescorer);
- assertEquals(6, recommendCount.get());
+ assertEquals(6, recommendCount.intValue());
cachingRecommender.recommend(2, 1, rescorer);
- assertEquals(7, recommendCount.get());
+ assertEquals(7, recommendCount.intValue());
cachingRecommender.recommend(1, 1, rescorer);
- assertEquals(7, recommendCount.get());
+ assertEquals(7, recommendCount.intValue());
cachingRecommender.recommend(2, 1, rescorer);
- assertEquals(7, recommendCount.get());
+ assertEquals(7, recommendCount.intValue());
// until you switch Rescorers
cachingRecommender.recommend(1, 1, null);
- assertEquals(8, recommendCount.get());
+ assertEquals(8, recommendCount.intValue());
cachingRecommender.recommend(2, 1, null);
- assertEquals(9, recommendCount.get());
+ assertEquals(9, recommendCount.intValue());
cachingRecommender.refresh(null);
cachingRecommender.estimatePreference(1, 1);
- assertEquals(10, recommendCount.get());
+ assertEquals(10, recommendCount.intValue());
cachingRecommender.estimatePreference(1, 2);
- assertEquals(11, recommendCount.get());
+ assertEquals(11, recommendCount.intValue());
cachingRecommender.estimatePreference(1, 2);
- assertEquals(11, recommendCount.get());
+ assertEquals(11, recommendCount.intValue());
}
}
Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java Thu Mar 18 18:15:16 2010
@@ -17,6 +17,7 @@
package org.apache.mahout.cf.taste.impl.recommender;
+import org.apache.commons.lang.mutable.MutableInt;
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.impl.TasteTestCase;
import org.apache.mahout.cf.taste.model.DataModel;
@@ -27,20 +28,19 @@ import org.apache.mahout.cf.taste.recomm
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
final class MockRecommender implements Recommender {
- private final AtomicInteger recommendCount;
+ private final MutableInt recommendCount;
- MockRecommender(AtomicInteger recommendCount) {
+ MockRecommender(MutableInt recommendCount) {
this.recommendCount = recommendCount;
}
@Override
public List<RecommendedItem> recommend(long userID, int howMany) {
- recommendCount.incrementAndGet();
+ recommendCount.increment();
return Collections.<RecommendedItem>singletonList(
new GenericRecommendedItem(1, 1.0f));
}
@@ -52,7 +52,7 @@ final class MockRecommender implements R
@Override
public float estimatePreference(long userID, long itemID) {
- recommendCount.incrementAndGet();
+ recommendCount.increment();
return 0.0f;
}