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);
}