mysql - 如何在 Apache Mahout 中将现有的具有 n 列的 MySQL 表作为 MySQLJDBCDataModel?

标签 mysql mahout

我正在尝试使用 Mahout 为我的项目创建一个推荐系统。我尝试了带有 .csv 文件的示例程序(来自 Mahout)。现在我正在使用MySQL数据库中的数据。我有一个名为“交易”的表,其中包含以下列。 transactioniduseriditemid购买数量金额评级

我看到 Mahout 需要数据采用“userid、itemid、偏好/评级”格式,并且我看到它具有 MySQLJDBCDataModel。所需的三列已存在于我的“交易”表中。

现在对于数据源,我应该创建一个仅包含所需 3 列的新表并从“交易”表复制值吗?或者,我可以以某种方式使用“交易”表本身吗?

我确实浏览了下面链接中的文档,但无法清楚地理解 http://archive.cloudera.com/cdh4/cdh/4/mahout/mahout-integration/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.html

请指教。先谢谢您的帮助。

最佳答案

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.

关于mysql - 如何在 Apache Mahout 中将现有的具有 n 列的 MySQL 表作为 MySQLJDBCDataModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825159/

相关文章:

java - 在将 mahout 与 map reduce 程序集成时,我在解析 XML 时遇到此错误

mysql - 使用左外连接时,第二个表中的数据会重复

mysql - 带有子查询的Mysql更新查询有什么问题?

python - 我无法使用 python 在 mysqldb 中分配主键或外键。

mysql - 根据另一个表中的列更新数据库表中的列

php - 如何防止零作为值记录在数据库中

java - Mahout - 简单的分类问题

distance - Manhattan/CityBlock-distance 用于生成推荐的示例?

hadoop - 使用项目相似度 hadoop 作业具有预先计算的项目相似度的基于可扩展实时项目的 mahout 推荐器?

tomcat - 每个数据模型的 Mahout servlet