Maybe the problem is the mysql type: INTEGER, I have read in Mahout book the type must be BIGINT for user_id and item_id.
2010/11/21 Sean Owen <[email protected]> > It is nothing to do with your code, I think. > > As far as I can tell, it is at least a minor bug in the driver. It should > not throw an NPE in any event. If it's being triggered by some wrong usage > pattern, I don't know what it is. The code looks fine. > > You could try the latest MySQL driver, and/or step through the problem with > the source code and debugger to try to get more information. If you come up > with a workaround, let the list know. > > On Sun, Nov 21, 2010 at 12:04 PM, qadro <[email protected]> wrote: > > > 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? > > > > > -- Gustavo Salazar Loor
