基于Spark推荐系统阅读3

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

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

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

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

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

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

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

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

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

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

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


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的推荐





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基于Spark推荐系统是一种利用Spark框架来构建和实现推荐系统Spark是一个快速、通用的大数据处理引擎,它提供了分布式计算的能力,适用于处理大规模数据集。 在Java中使用Spark构建推荐系统的一般步骤如下: 1. 数据准备:首先需要准备好推荐系统所需的数据集,包括用户数据和物品数据。这些数据可以来自于数据库、文件或其他数据源。 2. 数据预处理:对数据进行清洗、转换和特征提取等预处理操作,以便后续的模型训练和推荐计算。 3. 特征工程:根据业务需求,对用户和物品的特征进行提取和处理,例如用户的历史行为、物品的属性等。 4. 模型训练:使用Spark提供的机器学习库(如MLlib)或其他推荐算法库,训练推荐模型。常用的推荐算法包括协同过滤、矩阵分解等。 5. 模型评估:对训练得到的模型进行评估,可以使用交叉验证等方法来评估模型的性能和准确度。 6. 推荐计算:使用训练好的模型对新的用户和物品进行推荐计算,生成个性化的推荐结果。 7. 结果展示:将推荐结果展示给用户,可以通过网页、移动应用等形式呈现。 Java基于Spark推荐系统的优势在于Spark的分布式计算能力和丰富的机器学习库,可以处理大规模数据集和复杂的推荐算法。同时,Java作为一种常用的编程语言,具有广泛的应用和开发社区支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值