写点什么

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

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

关注

评论

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

兄弟矿场系统开发|兄弟矿场软件APP开发

51CTO熊平:HarmonyOS是大势所趋

科技汇

Golang command source code

escray

学习 极客时间 Go 语言 5月日更

音视频实战(6)- RTSP媒体协议流的录制方案及其覆盖策略详解

liuzhen007

音视频 5月日更 签约计划第二季

【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

牧小农

JVM

灵魂拷问:后端业务开发要会用 K8s 到什么程度?

阿里巴巴云原生

容器 运维 云原生 k8s 存储

KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力

阿里巴巴云原生

容器 开发者 云原生 监控 中间件

NetWebCore实现文件上传功能

happlyfox

学习 .net core 5月日更

这个好用的分布式应用配置中心,我们把它开源了

百度Geek说

分布式 大前端 服务器

XDPool比特兄弟矿场系统开发|XDPool比特兄弟矿场APP软件开发

Flink+Clickhouse构建实时数仓的最佳实践

Wping

大数据 flink 实时数仓 Clickhouse

数据产品经理的圣经,送你一份真贵的礼物 ~~ 年度数据产品经理们的总结

松子(李博源)

大数据 数据产品经理 数据产品

🕋【Redis干货领域】彻底走进主从架构的世界(入门篇)

码界西柚

主从同步 Redis 核心技术与实战 5月日更 Redis系列专题 原理篇

Java开发5年,我为什么选择从蚂蚁金服离职?浅谈经历和经验!

Java架构追梦

Java 架构 面试 蚂蚁金服 经历分享

双非渣硕,是如何拿到苏宁、阿里的offer的?(分享学习心得)

Java 程序员 架构 面试

抱歉,“行业毒瘤”这个锅,低/无代码不背

陈思

低代码 无代码 低代码平台 无代码平台

精选Hadoop高频面试题17道,附答案详细解析

五分钟学大数据

大数据 hadoop 5月日更

如何从一段视频中一次性修整多个片段

奈奈的杂社

视频剪辑 视频后期 视频处理

交通流量预测,EasyDL带你零代码实战

百度大脑

零代码 EasyDL

v03.06 鸿蒙内核源码分析(时钟任务) | 触发调度谁的贡献最大 | 百篇博客分析HarmonyOS源码

鸿蒙研究站

鸿蒙内核源码分析 百篇博客分析鸿蒙

博睿数据携手阿里云,打造以用户为中心的智能运维生态

博睿数据

阿里云 智能运维 博睿数据

hive的主流文件存储格式对比实验

大数据技术指南

大数据 hive 5月日更

这是我金三银四收到的第6个Offer:美团+阿里Java研发岗

Java 程序员 架构 面试

Iceberg0.11与Spark3.0结合

InfoQ_Springup

iceberg

iOS 面试策略之语言工具-Xcode使用

iOSer

ios xcode 语言 & 开发

微服务化转型,拆就行了?这样做很危险...

BoCloud博云

微服务

雀食蟀!Java Netty实战入门

北游学Java

Java Netty 网络 框架

SecSolar:为代码“捉虫”,让你能更专心写代码

华为云开发者联盟

代码 华为云 CloudIDE 代码安全检测 SecSolar

NAT穿透原理详解

IT酷盖

音视频 p2p NAT

引荐好友成为推广者还能拿额外奖励?!华为云引荐奖励计划来啦!

华为云开发者联盟

文章 返现奖励 推广计划 返利 团长

【实战问题】-- 布隆过滤器的三种实践:手写,Redission以及Guava(2)

秦怀杂货店

Java 布隆过滤器

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