http://www.infoq.com/cn/news/2014/12/mongdb-spark-movie-recommend
MovieWeb是一个电影相关的网站,它提供的功能包括搜索电影信息、排名或者电影明星资料等。它拥有10000部电影的信息,70000个用户,和超过1千万的电影评分。借用它的搜索目录,用户可以通过类型分类、排名和片名浏览等方式检索电影。但如何解决电影智能推荐的问题呢?近日MongoDB分享了他们结合Hadoop的经验。
MovieWeb基于Python。在构建电影推荐系统时,使用flask和PyMongo读取数据,应用Python网页应用浏览电影和评分推荐;使用Spark应用来运算处理实际的推荐,并用MLLib实现协同过滤;然后搜集电影评分的数据,并创建和训练数据模型,而后处理用户和电影的数据集,再反向应用训练过的模型来尝试预测电影排名。以上完成后,将预测结果写入MongoDB,接下来那些网页应用就可以将预测的排名展示出来,再收取新一轮的预测。其中用到的工具有Apache Hadoop 2.3.0(HDFS和YARN),Spark1.0和用于管理数据的MongoDB。
MovieWeb的工作流程:
以BSON的格式快速建立数据库;在HDFS中储存该BSON;将BSON读取到Spark应用中;用已有的排名评分训练模型;建立“用户—影片”对;为所有“用户—影片”对预测排名;将预测结果写入MongoDB采集库;网页应用展示推荐;每周重复一次以上工作。这不是一项MapReduce的工作,其代码量很少,加上引入语法基本上也只需要150行左右的代码。
Spark的环境建立和架构建立的执行语句如下:
$ export SPARK_JAR=spark-assembly-1.0.0-hadoop2.3.0.jar $ Export HADOOP_CONF_DIR=/usr/local/Hadoop/etc/Hadoop $ bin/spark-submit --master yarn-cluster --class com.mongodb.hadoop.demo.Recommender demo-1.0.jar --jars mongo-java-2.12.2.jar,mongo-hadoop-1.2.1.jar --driver-memory 1G --executor-memory 2G --num-executors 4
功能实现之后的推荐系统中,“您可能喜欢的影片”一栏,那些根据预测推荐的影片是基于用户正在浏览的影片的第一个所属类别。例如影片《非常嫌疑犯》,第一类别为“犯罪”,则浏览该片时所推荐的电影也都属于这一类别。当用户表现出需求时,系统就会自动为用户过滤类别,再将筛选出来的结果进入给用户的推荐广播之中。