我正在尝试使用 Mahout 为我的项目创建一个推荐系统。我尝试了带有 .csv 文件的示例程序(来自 Mahout)。现在我正在使用MySQL数据库中的数据。我有一个名为“交易”的表,其中包含以下列。
transactionid
、userid
、itemid
、购买数量
、金额
、评级
我看到 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,
很久以前我就做了如下的事情。我使用 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/