2012-07-24 2 views
1

나는 데이터베이스에 직접 연결하기로 결정한 작동 추천 장치를 가지고 있습니다. 그러나 사람들에게 물건을 추천하려고 할 때마다 나는 setFetchSize() is not >=0이라는 오류가 발생합니다. 여기 내 코드입니다 :권장 사항을 수정하는 방법 Mahout을 사용하여 SetFetchSize()를 실행하지 못했습니다.

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 에 내가 자동으로 두싯 생각 가져 오기 크기를 1000으로 설정하십시오.

답변

1

MySQLJDBCDataModel을 사용하고 있지만 데이터베이스가 SQL Server입니다. MySQL 구현은 드라이버가 필요하기 때문에 부정적인 값으로 페치 크기를 비활성화합니다. 예를 들어 getFetchSize()을 무시하지 않고 SQL Server에서 작동하도록 AbstractJDBCDataModel을 사용자 정의해야합니다.

관련 문제