如何在Apache Mahout中创建一个包含n列的现有MySQL表作为MySQLJDBCDataModel?

时间:2015-03-03 06:05:36

标签: mysql mahout

我正在尝试使用Mahout为我的项目创建推荐系统。我尝试使用.csv文件的示例程序(来自Mahout)。现在我正在使用MySQL数据库中的数据。我有一张名为' transaction'使用以下列。 transactioniduseriditemidpurchasequantityamountrating

我看到Mahout需要的数据格式为" userid,itemid,preference / rating"我看到它有MySQLJDBCDataModel。在我的交易中已经存在了所需的三个列'表。

现在对于数据源,我应该创建一个只包含所需3列的新表,并从'事务中复制值。表?或者,我可以使用'交易'桌子本身不知何故?

我确实浏览了以下链接中的文档,但是我们并不清楚http://archive.cloudera.com/cdh4/cdh/4/mahout/mahout-integration/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.html

请指教。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

By default it assumes  the table schema  

user_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
preference FLOAT NOT NULL,

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-integration/0.7/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java

很久以前我就像下面这样做了。我使用MySQLBooleanPrefJDBCDataModel.i没有偏好值。

public void datamodelimplementation2()
{
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setServerName("10.20.53.157");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setDatabaseName("mahout");
DataModel model = new MySQLBooleanPrefJDBCDataModel(dataSource,
"mahoutinput","cid", "pid", null);

ItemBasedRecommender recommender = null;

try {
        DataModel dataModel = new MySQLBooleanPrefJDBCDataModel(dataSource);
        ItemSimilarity similarity = new MySQLJDBCInMemoryItemSimilarity(dataSource);
        AllSimilarItemsCandidateItemsStrategy candidateStrategy =
            new AllSimilarItemsCandidateItemsStrategy(similarity);
          recommender = new GenericItemBasedRecommender(dataModel,
            similarity, candidateStrategy, candidateStrategy);

   } catch (Exception e1) {
  e1.printStackTrace();
 System.exit(-1);
  }

  recommender.refresh(null);
  List<RecommendedItem> r = null;
   try {

  r = recommender.recommend(18768, 10);


 } catch (TasteException e1) {
 // TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(r);

}


 as of my knowledge you need to create a table that contains user id,item id,rating. and incrementally add new data to that table.