作为我之前博客的延续,在这篇博客中,我将探讨如何使用 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现在,我们就可以读取useritem表把推荐结果返回给你的用户了。 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务