Hi there,

I've got a MySQL table:
pub_prefeences
user_id INTEGER NOT NULL (primary)
pub_id INTEGER NOT NULL (primary)
rate FLOAT NOT NULL
rtime DATETUME NOT NULL
is_favorite BIT(1) NOT NULL

and some simple data in it:
user_id   pub_id   rate
3         11       2
3         12       2
3         15       3
2         15       5
2         13       5
10        13       5
10        23       5

I call Mahout in the following way:
Integer neighborhoodSize = 1;
            
MysqlConnectionPoolDataSource dataSource
  = new MysqlConnectionPoolDataSource();
dataSource.setUser("root");
dataSource.setPassword("haslo");
dataSource.setServerName("localhost");
dataSource.setPort(3306);
dataSource.setDatabaseName("qadro");
MySQLJDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource,
"pub_preferences", "user_id", "pub_id", "rate", "rtime");

UserSimilarity userSimilarity
  = new PearsonCorrelationSimilarity(dataModel);
userSimilarity.setPreferenceInferrer(new 
AveragingPreferenceInferrer(dataModel));
UserNeighborhood neighborhood
  = new NearestNUserNeighborhood(neighborhoodSize,
userSimilarity, dataModel);
Recommender recommender = new GenericUserBasedRecommender(dataModel,
neighborhood, userSimilarity)
            
List<RecommendedItem> recommendations = recommender.recommend(forUserId, 1);

dataModel.getNumUsers(), or dataModel.getNumItems() work as expected, so does
dataModel.getPreferencesFromUser().

Unfortunately when asking for recommendation I get:

java.lang.NullPointerException
        at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2843)
        at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2830)
        at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.
getLongColumn(AbstractJDBCDataModel.java:721)
        at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.nextLong(AbstractJDBCDataModel.java:799)
        at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.next(AbstractJDBCDataModel.java:788)
        at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.next(AbstractJDBCDataModel.java:742)
        at org.apache.mahout.cf.taste.impl.recommender.TopItems
.getTopUsers(TopItems.java:99)
        at org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood
.getUserNeighborhood(NearestNUserNeighborhood.java:94)
        at org.apache.mahout.cf.taste.impl.recommender
.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:80)
        at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender
.recommend(AbstractRecommender.java:64)
        at pl.edu.agh.mobilne.RecommendationEngine
.recommend(RecommendationEngine.java:55)

Someone previously had this issue but it wasn't resolved:

http://web.archiveorange.com/archive/v/wfftaSgxJSE3hnw46y40

Can anyone help? What am I doing wrong? :/
Is my data table sufficient?
Is the neighborhood size sufficient?

Reply via email to