Author: srowen
Date: Sat Sep  4 17:56:30 2010
New Revision: 992650

URL: http://svn.apache.org/viewvc?rev=992650&view=rev
Log:
Made a few useful things public; use DISTINCT in SQL queries to ensure no 
unnecessary rows come back

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/AbstractJDBCComponent.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/AbstractJDBCComponent.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/AbstractJDBCComponent.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/AbstractJDBCComponent.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/jdbc/AbstractJDBCComponent.java
 Sat Sep  4 17:56:30 2010
@@ -67,7 +67,7 @@ public abstract class AbstractJDBCCompon
    * @throws TasteException
    *           if a JNDI error occurs
    */
-  protected static DataSource lookupDataSource(String dataSourceName) throws 
TasteException {
+  public static DataSource lookupDataSource(String dataSourceName) throws 
TasteException {
     Context context = null;
     try {
       context = new InitialContext();

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericBooleanPrefDataModel.java
 Sat Sep  4 17:56:30 2010
@@ -124,8 +124,14 @@ public final class GenericBooleanPrefDat
   public GenericBooleanPrefDataModel(DataModel dataModel) throws 
TasteException {
     this(toDataMap(dataModel));
   }
-  
-  private static FastByIDMap<FastIDSet> toDataMap(DataModel dataModel) throws 
TasteException {
+
+  /**
+   * Exports the simple user IDs and associated item IDs in the data model.
+   *
+   * @return a {...@link FastByIDMap} mapping user IDs to {...@link 
FastIDSet}s representing
+   *  that user's associated items
+   */
+  public static FastByIDMap<FastIDSet> toDataMap(DataModel dataModel) throws 
TasteException {
     FastByIDMap<FastIDSet> data = new 
FastByIDMap<FastIDSet>(dataModel.getNumUsers());
     LongPrimitiveIterator it = dataModel.getUserIDs();
     while (it.hasNext()) {
@@ -134,7 +140,7 @@ public final class GenericBooleanPrefDat
     }
     return data;
   }
-  
+
   public static FastByIDMap<FastIDSet> toDataMap(FastByIDMap<PreferenceArray> 
data) {
     for (Map.Entry<Long,Object> entry : ((FastByIDMap<Object>) 
(FastByIDMap<?>) data).entrySet()) {
       PreferenceArray prefArray = (PreferenceArray) entry.getValue();

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericDataModel.java
 Sat Sep  4 17:56:30 2010
@@ -166,8 +166,14 @@ public final class GenericDataModel exte
     }
     return (FastByIDMap<PreferenceArray>) (FastByIDMap<?>) data;
   }
-  
-  private static FastByIDMap<PreferenceArray> toDataMap(DataModel dataModel) 
throws TasteException {
+
+  /**
+   * Exports the simple user IDs and preferences in the data model.
+   *
+   * @return a {...@link FastByIDMap} mapping user IDs to {...@link 
PreferenceArray}s representing
+   *  that user's preferences
+   */
+  public static FastByIDMap<PreferenceArray> toDataMap(DataModel dataModel) 
throws TasteException {
     FastByIDMap<PreferenceArray> data = new 
FastByIDMap<PreferenceArray>(dataModel.getNumUsers());
     LongPrimitiveIterator it = dataModel.getUserIDs();
     while (it.hasNext()) {

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
 Sat Sep  4 17:56:30 2010
@@ -126,10 +126,10 @@ public class MySQLBooleanPrefJDBCDataMod
         "SELECT " + timestampColumn + " FROM " + preferenceTable + " WHERE " + 
userIDColumn + "=? AND "
             + itemIDColumn + "=?",
         // getUserSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " WHERE "
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " WHERE "
             + userIDColumn + "=?",
         // getAllUsersSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " ORDER BY "
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " ORDER BY "
             + userIDColumn,
         // getNumItemsSQL
         "SELECT COUNT(DISTINCT " + itemIDColumn + ") FROM " + preferenceTable,
@@ -144,7 +144,7 @@ public class MySQLBooleanPrefJDBCDataMod
         // getItemsSQL
         "SELECT DISTINCT " + itemIDColumn + " FROM " + preferenceTable + " 
ORDER BY " + itemIDColumn,
         // getPrefsForItemSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " WHERE "
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + " FROM " + 
preferenceTable + " WHERE "
             + itemIDColumn + "=? ORDER BY " + userIDColumn,
         // getNumPreferenceForItemSQL
         "SELECT COUNT(1) FROM " + preferenceTable + " WHERE " + itemIDColumn + 
"=?",

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
 Sat Sep  4 17:56:30 2010
@@ -211,10 +211,10 @@ public class MySQLJDBCDataModel extends 
         "SELECT " + timestampColumn + " FROM " + preferenceTable + " WHERE " + 
userIDColumn + "=? AND "
             + itemIDColumn + "=?",
         // getUserSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
             + " WHERE " + userIDColumn + "=? ORDER BY " + itemIDColumn,
         // getAllUsersSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
             + " ORDER BY " + userIDColumn + ", " + itemIDColumn,
         // getNumItemsSQL
         "SELECT COUNT(DISTINCT " + itemIDColumn + ") FROM " + preferenceTable,
@@ -230,7 +230,7 @@ public class MySQLJDBCDataModel extends 
         // getItemsSQL
         "SELECT DISTINCT " + itemIDColumn + " FROM " + preferenceTable + " 
ORDER BY " + itemIDColumn,
         // getPrefsForItemSQL
-        "SELECT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
+        "SELECT DISTINCT " + userIDColumn + ", " + itemIDColumn + ", " + 
preferenceColumn + " FROM " + preferenceTable
             + " WHERE " + itemIDColumn + "=? ORDER BY " + userIDColumn,
         // getNumPreferenceForItemSQL
         "SELECT COUNT(1) FROM " + preferenceTable + " WHERE " + itemIDColumn + 
"=?",

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
 Sat Sep  4 17:56:30 2010
@@ -33,13 +33,24 @@ public final class CachingItemSimilarity
   
   private final ItemSimilarity similarity;
   private final Cache<LongPair,Double> similarityCache;
-  
+
+  /**
+   * Creates a {...@link CachingItemSimilarity} on top of the given {...@link 
ItemSimilarity}.
+   * The cache is sized according to properties of the given {...@link 
DataModel}.
+   */
   public CachingItemSimilarity(ItemSimilarity similarity, DataModel dataModel) 
throws TasteException {
+    this(similarity, dataModel.getNumItems());
+  }
+
+  /**
+   * Creates a {...@link CachingItemSimilarity} on top of the given {...@link 
ItemSimilarity}.
+   * The cache size is capped by the given size.
+   */
+  public CachingItemSimilarity(ItemSimilarity similarity, int maxCacheSize) {
     if (similarity == null) {
       throw new IllegalArgumentException("similarity is null");
     }
     this.similarity = similarity;
-    int maxCacheSize = dataModel.getNumItems(); // just a dumb heuristic for 
sizing
     this.similarityCache = new Cache<LongPair,Double>(new 
SimilarityRetriever(similarity), maxCacheSize);
   }
   

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java?rev=992650&r1=992649&r2=992650&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java
 Sat Sep  4 17:56:30 2010
@@ -37,13 +37,24 @@ public final class CachingUserSimilarity
   
   private final UserSimilarity similarity;
   private final Cache<LongPair,Double> similarityCache;
-  
+
+  /**
+   * Creates a {...@link CachingUserSimilarity} on top of the given {...@link 
UserSimilarity}.
+   * The cache is sized according to properties of the given {...@link 
DataModel}.
+   */
   public CachingUserSimilarity(UserSimilarity similarity, DataModel dataModel) 
throws TasteException {
+    this(similarity, dataModel.getNumUsers());
+  }
+
+  /**
+   * Creates a {...@link CachingUserSimilarity} on top of the given {...@link 
UserSimilarity}.
+   * The cache size is capped by the given size.
+   */
+  public CachingUserSimilarity(UserSimilarity similarity, int maxCacheSize) {
     if (similarity == null) {
       throw new IllegalArgumentException("similarity is null");
     }
     this.similarity = similarity;
-    int maxCacheSize = dataModel.getNumUsers(); // just a dumb heuristic for 
sizing
     this.similarityCache = new Cache<LongPair,Double>(new 
SimilarityRetriever(similarity), maxCacheSize);
   }
   


Reply via email to