基于Spark推荐系统阅读3

电影推荐,设计为用户提供电影推荐,MovieLens数据集---用户描述电影描述评分记录三部分。

用户的静态信息描述了该用户的人口统计学信息,如表征该用户的性别年龄等。

电影的静态信息则描述了该电影的内容,如表征该电影是喜剧恐怖剧爱情剧等;

用户的评分记录则是用户的行为信息,表示用户看完电影之后对该电影的量化指标,它是连接用户与电影的媒介

在大型电影推荐网站中,推荐系统的设计往往是多种推荐引擎,包括基于电影内容的推荐、协同过滤推荐等,而面对海量数据,推荐引擎往往按照离线和在线计算两部分设计。

根据MovieLens数据集提供的数据类型,实现基于多种推荐引擎的混合推荐,分别是基于人口统计学的推荐基于内容的推荐基于SVD的推荐

系统中较为核心的三大模块:数据仓库模块、推荐引擎组、结果处理模块。

1)高性能数据仓库的设计:Spark SQL+HDFS+Parquet文件类型相结合的方案-----满足大数据环境下推荐系统的查询分析要求。具体就是:将推荐系统所需数据以Parquet文件的形式,存储于HDFS中,查询时使用Spark SQL查询数据。

数据仓库中的数据包含三个层次:a 原始数据层----将数据集中的数据抽象再封装,例如原始日志中有XX.dat文件,原始数据层的任务就是将该文件解析后以Parquet文件的形式存储于HDFS中,同时抽象成数据仓库表,以Spark SQL为接口,供上层的各推荐引擎调用。

b 离线中间层----该层基于原始数据层,是各推荐引擎的离线部分产生的中间计算结果。这一层的计算仍然与具体推荐对象无关,因此可以先离线计算好,然后供上层在线计算部分使用。例如电影内容的推荐,电影之间的相似度计算结果就属于这一层,计算后将数据以Parquet文件的形式储存于数据仓库中,以的形式供上层调用。

c 推荐结果层---该层是各推荐引擎基于中间层数据进行个性化推荐的结果数据,该层数据量较少,往往存储在内存中,在进行过滤、排序等操作后,作为最终的推荐结果。

扫描二维码关注公众号,回复: 1686979 查看本文章


2) 推荐引擎组:三个推荐引擎---基于人口统计学的推荐、基于内容的推荐、基于SVD的推荐【模块化设计】。 用这3个推荐引擎的原因:基于人口统计学的推荐利用了用户描述文件,基于内容的推荐利用了电影描述文件,基于SVD的推荐则利用了用户评分文件

每一种推荐引擎都包含两部分:离线计算部分和在线计算部分。离线计算部分处理原始数据,数据量和计算量均较大,耗时较长,一般采用分布式计算框架,如Spark等【例如计算用户之间的相似度,计算量很大,又不与具体的推荐目标相关,故可以先计算出来,以逻辑表的形式存入数据仓库中】。在线计算部分与具体的推荐目标相关,需要在离线计算的基础上,以最快的速度给出推荐结果。在线计算部分计算量不是很大,数据量也不多,甚至可以先将数据加载入内存,来提高推荐速度。在线计算的结果就是推荐引擎的输出。

实现两类基本的推荐:评分预测Top-N推荐


3)结果处理模块

加权型并行混合模型---每一个推荐引擎都有各自的输出,本模块就是将推荐引擎的输出以一定的规则统一起来。1.评分预测的结果处理。 2.Top-N的结果处理-----过滤、排名、推荐解释、结果生成


基于Spark的设计

系统采用了Scala语言,基于Spark是实现。 对于每一个推荐引擎来说,Spark SQL作为数据仓库的接口,Spark编程模型中有很多算子,算子的计算都是基于RDD的。



基于Spark的推荐系统的实现

MovieLens数据集。

主要用到以下3个文件:

1. users.dat 描绘用户信息 UserID::Gender::Age::Occupation::Zip-code 其中Occupation已经被数字字典化-----用户相关信息,构造基于人口统计学的推荐

2. movies.dat 该文件描绘了电影信息 MovieID::Title::Genres 电影ID::名称::风格------物品相关内容描述,构造基于内容的推荐

3. ratings.dat 该文件描绘了用户的打分记录,UserID::MovieID::Rating::Timestamp  最后一个是时间戳-----提供了用户行为信息,构造基于SVD的协同过滤推荐


高性能数据仓库的实现


数据仓库是面向主题的数据集合,通常供数据分析使用。数据仓库搭建在HDFS之上,底层使用Parquet文件类型,使用Snappy压缩【高速解压缩库】,上层由Spark SQL查询。

初始库的实现

初始库由三张构成:user_base, movie_base和rating_base,都要合理设置Parquet文件的Schema

rating_base表的实现

数据仓库的查询操作:只需访问数据并注册一张逻辑表即可,注册之后就可以以数据库表的方式,用sql语句进行查询了。

推荐引擎组实现

基于内容的推荐---解决电影冷启动问题   基于人口统计学的推荐解决了用户冷启动问题   基于SVD的推荐则能利用用户的评分记录进行个性化推荐。用户的评分记录是动态增加的,会提供越来越丰富的信息,供推荐引擎挖掘

入口参数:目标用户user  目标电影movie

调节参数 如推荐列表的项目个数等【主要以配置文件的形式存在】


基于人口统计学的推荐

基于内容的推荐

基于SVD的推荐





















猜你喜欢

转载自blog.csdn.net/qq_28088259/article/details/79076847
今日推荐