1

私はもっ​​と速くしたかった機能的なレコメンダーを持っているので、それをデータベースに直接接続することにしました。しかし、私が人々に物事を推薦しようとするたびに、私はそのエラーを受け取りますsetFetchSize() is not >=0。これが私のコードです:

MySQLJDBCDataModel dataModel = null;
try {
  Class.forName("net.sourceforge.jtds.jdbc.Driver");
  net.sourceforge.jtds.jdbcx.JtdsDataSource ds = new net.sourceforge.jtds.jdbcx.JtdsDataSource();
  ds.setServerName("xxxxx");
  ds.setDatabaseName("xxxxx");
  ds.setUser("xxxxx");
  ds.setPassword(xxxxx);
  ds.setDomain("xxxxx");
  //net.sourceforge.jtds.jdbc.JtdsStatement.setFetchSize(10);
  dataModel = new MySQLJDBCDataModel(ds, "test_tbl", "user_id", "item_id", "preference", null);
} catch (Exception e) {
  System.out.println("can't connect");
}
ArrayList<String> itemList=new ArrayList<String>();
ItemSimilarity similarity = new FileItemSimilarity(new File("output/part-r-00000"));
ItemBasedRecommender recommender = new GenericItemBasedRecommender(dataModel, similarity);
//List<RecommendedItem> recommendedItems=recommender.recommend(userid,10);
Recommender cachingRecommender = new CachingRecommender(recommender);
List<userRecData> allUserRecs = new ArrayList<userRecData>();
List<RecommendedItem> uRec=cachingRecommender.recommend(userobjectid,10);

そして、私はエラーを受け取ります:

java.sql.SQLException: The setFetchSize method requires a parameter value >= 0.
at net.sourceforge.jtds.jdbc.JtdsStatement.setFetchSize(JtdsStatement.java:998)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumThings(AbstractJDBCDataModel.java:584)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumUsers(AbstractJDBCDataModel.java:560)
at org.apache.mahout.cf.taste.impl.recommender.CachingRecommender.<init>(CachingRecommender.java:63)
at mia.recommender.RecommenderIntro.getRecommendations(RecommenderIntro.java:79)
at mia.recommender.RecommenderIntro.main(RecommenderIntro.java:43)

で失敗するcachingRecommenderか、それrecommnder.recommend を削除すると、Mahoutがフェッチサイズを自動的に設定すると思いました1000

4

1 に答える 1

1

を使用してMySQLJDBCDataModelいますが、データベースはSQLServerです。MySQL実装では、ドライバーが負の値を必要とするため、負の値のフェッチサイズを無効にします。getFetchSize()たとえば、オーバーライドしないことにより、SQLServerで動作するようにAbstractJDBCDataModelをカスタマイズする必要があります。

于 2012-07-24T15:37:24.850 に答える