翻译于 2013/02/15 15:08
作为我之前博客的延续,在这篇博客中,我将探讨如何使用 Mahout 和 Hadoop 实现一个 推荐引擎
跟推荐引擎十分相似,如果我们需要利用MapReduce的优点,我们需要重写它。Mashout支持推荐算法。推荐引擎包含如下组件:
在推荐引擎里面,相当于“Hello world”的程序就是Netflix电影评分。电影数据可以在这里下下载。测试数据包含用户租借电影的历史数据和用户对电影的评分数据。当你需要租借一部新的电影,推荐引擎会基于你的租借习惯,还有其他跟你相似的用户的租借记录,给你推荐一些电影。测试数据保存在事务型数据库里面,就如MySQL。我们可以写一个程序读取测试数据并把它导入Hadoop的文件系统里面。当你运行Mashout MapReduce,就会得到前“n”个推荐电影。如果你细心观察测试数据,你会发现有userid, itemid, rating字段,并以逗号隔开。它会假设,你在数据库中维护着用户和项目的数据表,并且通过这两个表的结合,给用户提供有意义的信息。
下面,我们一起看看基于项目的推荐算法是如何通过MapReduce实现的,想获得更多这方面的信息,可以查阅Mahout in Action by Manning, chapter 6.
下面让我们来分析一下航班预订系统。当一个用户需要购买到达某地的机票的时候,我们就会基于他之前购买过的航班记录和其他相似乘客的订票记录,给他推荐航班。假设MySQL里面存在这样的数据,我们可以使用sqoop脚本把数据导入到HDFS:
sqoop import --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem在Hadoop中运行以下mashout脚本
hadoop jar mahout-core-0.6-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --usersFile input/users.txt --booleanData --similarityClassname SIMILARITY_COOCCURRENCE
最后,运行sqoop脚本把分析结果导回到mysql中:
sqoop export --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem --export-dir useritem/part-m-00000
评论删除后,数据将无法恢复
评论(5)
引用来自“enixyu”的评论
作者原话“The value to recommend to the user is the item with the highest of the zero value”,但我觉得不妥,应该是non zero value吧。。。如果是零值,说明用户没有购买记录,或者项目之间没有同时被购买的记录,那推荐这样的项目,有什么意思呢。。。