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