You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@mahout.apache.org by Marcin Sieniek <ms...@interia.pl> on 2010/11/21 13:26:54 UTC
NullPointerException in MySQL driver when using Mahout's Taste
MySQLJDBCDataModel
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?
Thanks,
Marcin
------------------------------------------------------
Samochody na każdą miarę
http://linkint.pl/f2855
Re: NullPointerException in MySQL driver when using Mahout's Taste MySQLJDBCDataModel
Posted by Lance Norskog <go...@gmail.com>.
Would it be possible to run this under a debugger? Then you could show
the values at the NN and Memory slope methods in the above stack
trace.
Lance
On 11/21/10, Marcin Sieniek <ms...@interia.pl> 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?
>
> Thanks,
> Marcin
>
> ------------------------------------------------------
> Samochody na każdą miarę
> http://linkint.pl/f2855
>
>
--
Lance Norskog
goksron@gmail.com