写点什么

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

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

关注

评论

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

人生算法:做好自己这家公司的CEO

石云升

读书笔记 思维模型 5月日更

五一假期旅游完突然收到(余额宝)面试,四面成功拿下offer

Java架构师迁哥

Django 之 Models(Models 模型 & 数据表关系)

若尘

django model Python编程 5月日更

从源码角度研究Java动态代理

叫我阿柒啊

动态代理 代理模式 rmi

week5作业

Geek_2e7dd7

架构实战营

现在已经卷到需要问三色标记了吗?

艾小仙

为什么不推荐C++?

实力程序员

密码学系列之:SAFER

程序那些事

密码学 程序那些事 SAFER

高可用DevHa实践,告诉你生产环境0性能故障是如何做到的!

TakinTalks稳定性社区

压测 性能调优 全链路压测 系统稳定高可用 性能压测

5 月 28 日 - 29 日阿里云峰会视频云专场直播预告

阿里云CloudImagine

阿里云 音视频

2021 全球技术领导力峰会 融云布道技术领导力进阶之路

融云 RongCloud

智慧党建平台搭建,党建干部管理系统,智慧组工平台解决方案

V8数据存储(上篇):栈和堆

梁龙先森

大前端 浏览器

代码精进之路学习笔记

escray

学习 极客时间 5月日更

眼观六路耳听八方还不知疲倦?数仓智能运维服务体系是怎么做到的?

华为云开发者联盟

数据库 数据仓库 监控 智能运维 数据库监控

MySQL事务处理特性的实现原理

华为云开发者联盟

MySQL 数据库 innodb 事务 隔离

英特尔院士斯旺:由外而内重塑芯片设计

E科讯

低代码实现传统装饰企业的管理跃迁

华为云开发者联盟

低代码 华为云 计算 低代码开发 AppCube

博睿数据2021战略发布巡展,开辟IT运维创新路径

博睿数据

博睿数据 数据链DNA 服务可达

一场“测谎”人机对战背后的故事:度小满的技术进击之路

脑极体

计算社会科学 - DAY 17

Qien Z.

5月日更

用图数据库可视化探索 Chia Network 区块链数据

古思为

区块链 可视化 图数据库

鸿蒙轻内核M核源码分析:数据结构之任务排序链表

华为云开发者联盟

鸿蒙 数据结构 任务排序链表 双向链表数组 鸿蒙轻内核

5分钟速读之Rust权威指南(十一)

wzx

rust

探秘区块链技术在计算机取证过程中的机制与应用

CECBC

面向WEB开发人员的Docker(六):使用nginx部署静态网站

devpoint

Docker

【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

牧小农

JVM

appium 入门参考

37手游iOS技术运营团队

ios 测试 自动化测试 iOS Developer

【Flutter 专题】118 图解特殊利器 ShaderMask 着色器

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

并发王者课-青铜7:顺藤摸瓜-如何从synchronized中的锁认识Monitor

MetaThoughts

Java 多线程 并发

webRTC的标准与发展

anyRTC开发者

音视频 WebRTC RTC

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