Author: srowen
Date: Thu Apr 30 22:09:22 2009
New Revision: 770467

URL: http://svn.apache.org/viewvc?rev=770467&view=rev
Log:
Traded a bit of processing time for better memory usage in FileDataModel

Modified:
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java?rev=770467&r1=770466&r2=770467&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
 Thu Apr 30 22:09:22 2009
@@ -29,6 +29,8 @@
 import org.apache.mahout.cf.taste.model.Item;
 import org.apache.mahout.cf.taste.model.Preference;
 import org.apache.mahout.cf.taste.model.User;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -46,6 +48,8 @@
  */
 public final class GenericDataModel implements DataModel, Serializable {
 
+  private static final Logger log = 
LoggerFactory.getLogger(GenericDataModel.class);
+
   private static final Preference[] NO_PREFS_ARRAY = new Preference[0];
   private static final Iterable<Preference> NO_PREFS_ITERABLE = new 
EmptyIterable<Preference>();
 
@@ -72,6 +76,7 @@
     // I'm abusing generics a little here since I want to use this (huge) map 
to hold Lists,
     // then arrays, and don't want to allocate two Maps at once here.
     Map<Object, Object> prefsForItems = new FastMap<Object, Object>();
+    int currentCount = 0;
     for (User user : users) {
       userMap.put(user.getID(), user);
       Preference[] prefsArray = user.getPreferencesAsArray();
@@ -86,6 +91,10 @@
         }
         prefsForItem.add(preference);
       }
+      currentCount++;
+      if (currentCount % 10000 == 0) {
+        log.info("Processed {} users", currentCount);
+      }
     }
 
     List<User> usersCopy = new ArrayList<User>(userMap.values());

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=770467&r1=770466&r2=770467&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 Apr 30 22:09:22 2009
@@ -228,7 +228,7 @@
     }
     List<Preference> prefs = data.get(userID);
     if (prefs == null) {
-      prefs = new ArrayList<Preference>();
+      prefs = new ArrayList<Preference>(2);
       data.put(userID, prefs);
     }
 
@@ -433,7 +433,10 @@
     @Override
     public User next() {
       Map.Entry<String, List<Preference>> datum = dataIterator.next();
-      return buildUser(datum.getKey(), datum.getValue());
+      String key = datum.getKey();
+      List<Preference> value = datum.getValue();
+      dataIterator.remove();
+      return buildUser(key, value);
     }
     @Override
     public void remove() {


Reply via email to