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/07/22 13:14:13 UTC
svn commit: r796668 - in
/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model:
GenericBooleanUserDataModel.java GenericDataModel.java
Author: srowen
Date: Wed Jul 22 11:14:13 2009
New Revision: 796668
URL: http://svn.apache.org/viewvc?rev=796668&view=rev
Log:
Performance optimizations -- use Fast data structures and rehash to flush garbage before use
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanUserDataModel.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanUserDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanUserDataModel.java?rev=796668&r1=796667&r2=796668&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanUserDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanUserDataModel.java Wed Jul 22 11:14:13 2009
@@ -22,6 +22,7 @@
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.common.FastMap;
+import org.apache.mahout.cf.taste.impl.common.FastSet;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.Item;
import org.apache.mahout.cf.taste.model.Preference;
@@ -33,7 +34,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
+import java.util.Set;
/**
* TODO many methods here have not been implemented properly yet
@@ -41,7 +42,7 @@
public final class GenericBooleanUserDataModel implements DataModel, Serializable {
private final List<User> users;
- private final Map<Object, User> userMap;
+ private final FastMap<Object, User> userMap;
private final Object[] itemIDs;
//private final Set<Object> itemIDSet;
@@ -49,9 +50,9 @@
if (users == null) {
throw new IllegalArgumentException("users is null");
}
- this.users = new ArrayList<User>();
- this.userMap = new FastMap<Object, User>();
- List<Object> itemIDs = new ArrayList<Object>();
+ this.users = new ArrayList<User>(1003);
+ this.userMap = new FastMap<Object, User>(1003);
+ Set<Object> itemIDs = new FastSet<Object>(1003);
for (User user : users) {
if (!(user instanceof BooleanPrefUser)) {
throw new IllegalArgumentException("Must use a source of BooleanPrefUsers");
@@ -60,6 +61,7 @@
userMap.put(user.getID(), user);
itemIDs.addAll(((BooleanPrefUser) user).getItemIDs());
}
+ userMap.rehash();
Collections.sort(this.users);
this.itemIDs = itemIDs.toArray();
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=796668&r1=796667&r2=796668&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 Wed Jul 22 11:14:13 2009
@@ -54,10 +54,10 @@
private static final Iterable<Preference> NO_PREFS_ITERABLE = new EmptyIterable<Preference>();
private final List<User> users;
- private final Map<Object, User> userMap;
+ private final FastMap<Object, User> userMap;
private final List<Item> items;
- private final Map<Object, Item> itemMap;
- private final Map<Object, Preference[]> preferenceForItems;
+ private final FastMap<Object, Item> itemMap;
+ private final FastMap<Object, Preference[]> preferenceForItems;
/**
* <p>Creates a new {@link GenericDataModel} from the given {@link User}s (and their preferences). This {@link
@@ -75,7 +75,7 @@
this.itemMap = new FastMap<Object, Item>();
// 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>();
+ FastMap<Object, Object> prefsForItems = new FastMap<Object, Object>();
int currentCount = 0;
for (User user : users) {
userMap.put(user.getID(), user);
@@ -96,6 +96,8 @@
log.info("Processed {} users", currentCount);
}
}
+ userMap.rehash();
+ itemMap.rehash();
List<User> usersCopy = new ArrayList<User>(userMap.values());
Collections.sort(usersCopy);
@@ -105,6 +107,7 @@
Collections.sort(itemsCopy);
this.items = Collections.unmodifiableList(itemsCopy);
+ prefsForItems.rehash();
// Swap out lists for arrays here -- using the same Map. This is why the generics mess is worth it.
for (Map.Entry<Object, Object> entry : prefsForItems.entrySet()) {
List<Preference> list = (List<Preference>) entry.getValue();
@@ -112,8 +115,9 @@
Arrays.sort(prefsAsArray, ByUserPreferenceComparator.getInstance());
entry.setValue(prefsAsArray);
}
+
// Yeah more generics ugliness
- this.preferenceForItems = (Map<Object, Preference[]>) (Map<Object, ?>) prefsForItems;
+ this.preferenceForItems = (FastMap<Object, Preference[]>) (FastMap<Object, ?>) prefsForItems;
}
/**