gpt4 book ai didi

java - 如何修复使用 Mahout 在 SetFetchSize() 上失败的建议

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:39 29 4
gpt4 key购买 nike

我有一个功能正常的推荐系统,我想让它变得更快,所以我决定将它直接连接到我的数据库。然而,每次我尝试向人们推荐东西时,我都会收到一个错误: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

最佳答案

您正在使用MySQLJDBCDataModel,但您的数据库是SQL Server。 MySQL 实现禁用负值的获取大小,因为它的驱动程序需要这样做。您需要自定义 AbstractJDBCDataModel 以与 SQL Server 配合使用 - 例如,不重写 getFetchSize()

关于java - 如何修复使用 Mahout 在 SetFetchSize() 上失败的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com