10月21日,杭州云栖大会-技术&可持续发展论坛,注册有礼 了解详情
写点什么

用 MongoDB 和 Spark 实现电影推荐

2014 年 12 月 23 日

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

功能实现之后的推荐系统中,“您可能喜欢的影片”一栏,那些根据预测推荐的影片是基于用户正在浏览的影片的第一个所属类别。例如影片《非常嫌疑犯》,第一类别为“犯罪”,则浏览该片时所推荐的电影也都属于这一类别。当用户表现出需求时,系统就会自动为用户过滤类别,再将筛选出来的结果进入给用户的推荐广播之中。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 12 月 23 日 00:456259
用户头像

发布了 268 篇内容, 共 104.7 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

Elasticsearch Analyzer 分词器

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

Kubectl Plugin 推荐(一)| 可观测性篇

郭旭东

kubectl kubectl plugin

笔记整理:技术架构涵盖内容和演变过程总结

小傅哥

Java 程序员 小傅哥 架构设计 架构图

华云大咖说 | 高校混合云建设及应用

华云数据

翻译:《实用的Python编程》03_05_Main_module

codists

Python

智汇华云 | ArcherOS Stack—软件定义数据中心“利器”

华云数据

百分点大数据技术团队:数据治理“PAI”实施方法论

百分点大数据团队

详解NLP和时序预测的相似性(附赠AAAI21最佳论文INFORMER的详细解析)

华为云开发者社区

自然语言处理 深度学习 时序预测 RNN Informer

25个关键技术点,带你熟悉Python

华为云开发者社区

Python

人民网:亚马逊云科技,以这样姿势扎根中国!

亚马逊云科技 (Amazon Web Services)

Java的锁

并发编程

KubeEdge 1.6发布:可靠的K8s原生边云API

华为云原生团队

开源 云原生 边缘技术 kubeedge

SQL Server 删除正在使用数据库

田镇珲

从JVM底层原理分析数值交换那些事

秦怀杂货店

JVM 交换数值

互联网短平快下,DevCloud如何支撑软件开发的“转型”?

华为云开发者社区

android 敏捷开发 软件开发 华为云 devcloud

2021 创新加速周蓄势待发,铆足牛劲再出发!

亚马逊云科技 (Amazon Web Services)

一个简单实用的Linux性能分析工具

运维研习社

Linux 性能分析

AI数学基础之:概率和上帝视角

程序那些事

人工智能 AI 程序那些事 概率论

MySQL数据库DDL、DML详解

若尘

MySQL

滚雪球学 Python 第二轮开启,进阶之路,列表与元组那些事儿

梦想橡皮擦

28天写作 3月日更

Shibboleth IdP4 升级指南

冯骐

认证 Shibboleth IdP 上海教育认证 上海教育

百分点数据科学实验室:产品生命周期管理创新应用落地实践

百分点大数据团队

力扣(LeetCode)刷题,简单+中等题(第32期)

不脱发的程序猿

算法 LeetCode 编程能力 28天写作 3月日更

《精通比特币》学习笔记(第二章)

棉花糖

区块链 读书笔记

是什么支持“毅力号”在火星上尽情摄影?

亚马逊云科技 (Amazon Web Services)

建信金科大咖访谈:金融科技驱动业务创新,智慧运营引领发展转型

金科优源汇

工作中,有哪些SQL是我们必须要掌握的?

xiezhr

oracle sql SQL语法 3月日更

关于写作的一点小想法「Day 13」

道伟

28天写作

不知不觉不假思索——可供性

Justin

心理学 28天写作 游戏设计

云小课丨网络好不好,ping一下就知道

华为云开发者社区

网络 虚拟私有云 ping ICMP 安全组

报名 | 全球首个小资源音色克隆赛结果出炉,高分队伍线上报告会

爱奇艺技术产品团队

聊一下 Mesh 数据平面 Sidecar 与 Service 通信的那些事儿

聊一下 Mesh 数据平面 Sidecar 与 Service 通信的那些事儿

用MongoDB和Spark实现电影推荐-InfoQ