写点什么

用 MongoDB 和 Spark 实现电影推荐

  • 2014-12-23
  • 本文字数:980 字

    阅读完需:约 3 分钟

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:457346
用户头像

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

关注

评论

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

CSS实现阮大佬博文的阅读进度功能

战场小包

CSS css3 前端 2月月更

[Python]介绍

謓泽

Python 2月月更

学生管理系统的架构设计

凌波微步

「架构实战营」

十年所学,梦想终至,不负时光 | 《云端架构》新书首推发布,来自极度努力的吕校长

博文视点Broadview

大厂偏爱的Agent技术究竟是个啥

捉虫大师

架构 agent

基于CC2530设计的智能风扇

DS小龙哥

2月月更 智能风扇

超硬核攻略!《2022金融云原生落地实用指南》重磅发布(限时免费下载)

York

学生管理系统的架构文档

卡西毛豆静爸

「架构实战营」

好用不卡,这些插件和配置让你的 Webstorm 更牛逼!

前端下午茶

前端 工具 webstorm

VIPKID基于Karmada的容器PaaS平台落地实践

华为云原生团队

开源 Kubernetes k8s多集群管理 混合云 分布式云

eBPF 完美搭档:连接云原生网络的 Cilium

火山引擎边缘云

边缘计算 ebpf 云原生网络 cllium

关于MVVM和MVC,面试看这篇就够了

山河已无恙

mvc 全栈 MVVM 2月月更

如何打造一个能自动回复的钉钉机器人

老表

Python 机器人 Linxu 跟老表学云服务器

用简单例子带你了解联合索引查询原理及生效规则

华为云开发者联盟

sql 索引 查询 联合索引

盘一盘常见的6种索引失效情况

华为云开发者联盟

MySQL 索引 字符串 查询 索引失效

系统学习 TypeScript(二)——开发流程和语法规则

编程三昧

typescript 前端 2月月更

初级工程师建议收藏|企业级APIs安全实践指南

领创集团AdvanceGroup

Python 中的数组哪去了?

宇宙之一粟

Python 数组 2月月更

数据库读写分离如何保证主从一致性?

蜜糖的代码注释

MySQL 数据库 2月月更

工作想法小计(2):2/14 - 2/18

非晓为骁

个人成长

UMEM:友盟统计自定义事件多应用一键同步 & 批处理工具

SamgeApp

Docker Vue 友盟助手 友盟自定义事件批处理 友盟统计

面试突击25:sleep和wait有什么区别?

王磊

java面试

存储新图谱:DNA存储的边界与天地

脑极体

『The ShardingSphere Global Echo』Vol.4

SphereEx

数据库 开源 中间件 ShardingSphere SphereEx

云原生时代,如何保证容器镜像安全?

极狐GitLab

DevSecOps 镜像安全 极狐GitLab

Pulsar 职位广场 | 腾讯、华为云、虾皮、众安保险、StreamNative 等多个热招岗位

Apache Pulsar

开源 架构 云原生 招聘 Apache Pulsar

CNCF 沙箱项目 OCM Placement 多集群调度指南

阿里巴巴云原生

阿里云 云原生 OCM Placement

FIddler+Proxifer工具对windows PC客户端进行抓包

喀拉峻

黑客 网络安全

Nginx跨域解决配置示例

nginx 跨域

[Python]第一章(建议收藏)

謓泽

Python 2月月更

用MongoDB和Spark实现电影推荐_语言 & 开发_张天雷_InfoQ精选文章