CN110717093A - 一种基于Spark的电影推荐系统及方法 - Google Patents
一种基于Spark的电影推荐系统及方法 Download PDFInfo
- Publication number
- CN110717093A CN110717093A CN201910798202.8A CN201910798202A CN110717093A CN 110717093 A CN110717093 A CN 110717093A CN 201910798202 A CN201910798202 A CN 201910798202A CN 110717093 A CN110717093 A CN 110717093A
- Authority
- CN
- China
- Prior art keywords
- recommendation
- movie
- user
- time
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/25—Management operations performed by the server for facilitating the content distribution or administrating data related to end-users or client devices, e.g. end-user or client device authentication, learning user preferences for recommending movies
- H04N21/251—Learning process for intelligent management, e.g. learning user preferences for recommending movies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/25—Management operations performed by the server for facilitating the content distribution or administrating data related to end-users or client devices, e.g. end-user or client device authentication, learning user preferences for recommending movies
- H04N21/251—Learning process for intelligent management, e.g. learning user preferences for recommending movies
- H04N21/252—Processing of multiple end-users' preferences to derive collaborative data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于Spark的电影推荐系统,包括数据采集部分、数据存储部分、离线推荐部分和实时推荐部分,其中:所述数据采集部分:通过Web端实时监控用户数据变化,Flume从Web端运行日志中读取日志更新,获取用户对电影的评分情况,将日志信息实时发送Kafka集群,使用Kafka作为流式数据的缓存组件接受来自Flume的数据采集请求,并将数据推送到实时推荐部分;本发明通过使用MongoDB、ES、Redis作为数据存储部分,同时作为原始数据和离线、实时数据处理的数据存储,大大提高了实时和离线的计算效果。
Description
技术领域
本发明涉及实时推荐系统技术领域,具体涉及一种基于Spark的电影推荐系统及方法。
背景技术
随着互联网的不断发展,网上各种各样的电影、音乐等推荐层出不穷,而一个好的推荐系统能够实时为用户推出想要的信息。推荐系统是信息过载所采用的措施,面对海量的数据信息,从中快速推荐出符合用户特点的物品,其所针对的是一些“选择恐惧症”、没有明确需求的人;其中信息消费者所面对的是如何从大量信息中找到自己感兴趣的信息,这是是一件很困难的事,而信息生产者所面对的是如何让自己生产的信息脱颖而出、受到大众的喜爱,这也是一件很困难的事情。
现有技术中解决这些问题通常采用分类目录和搜索引擎,目前的网站都是这样操作,但是这有弊端:信息量小、不够个性化、必须有明确目标。推荐系统是自动化地通过分析用户的历史行为数据,完成用户的个性化建模,从而主动给用户推荐能够满足他们兴趣和需求的信息的软件系统。推荐引擎需要依赖用户的行为日志,因此一般都做为一个后台应用程序存在于网站中。通过截取网站提供大量用户行为日志,给用户提供不同的个性化页面或者信息,提高整个网站的点击率和转化率。
现有推荐系统一般都由三个部分组成:前端的交互界面、日志系统以及推荐算法系统。但是,个性化推荐也存在弊端:(1)存在信息过载,用户不能很容易从所有物品中找到喜欢的物品;(2)用户大部分时候没有特别明确的需求。
一个实时推荐系统能够根据用户兴趣变化,为用户推荐出需要的内容;而一个好的实时电影推荐系统,对推荐算法要求是很高的,不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。这是现阶段急需解决的问题。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于Spark的电影推荐系统,该系统能够实时监控用户数据变化,获取用户数据,通过混合推荐算法为用户推荐需要的电影内容,提高推荐的实时性和准确性。
本发明的另一目的在于提供一种基于Spark的电影推荐方法。
本发明的目的通过下述技术方案实现:
一种基于Spark的电影推荐系统,包括数据采集部分、数据存储部分、离线推荐部分和实时推荐部分,其中:
所述数据采集部分:通过Web端实时监控用户数据变化,Flume从Web端运行日志中读取日志更新,获取用户对电影的评分情况,将日志信息实时发送Kafka集群,使用Kafka作为流式数据的缓存组件接受来自Flume的数据采集请求,并将数据推送到实时推荐部分;
所述数据存储部分:业务数据库采用文档数据库MongoDB作为主数据库,主要负责平台业务逻辑数据的存储;采用ElasticSearch(ES)作为模糊检索服务器,通过利用ES强大的匹配查询能力实现基于内容的推荐服务;采用Redis作为缓存数据库,用来支撑实时推荐部分对于数据的高速获取需求,存储按照时间从大到小的顺序存入用户的最近评分队列中;
所述离线推荐部分:通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定运行时间完成对任务的触发执行,定期处理统计的数据;离线统计服务批处理统计采用Spark Core+Spark SQL进行实现,实现对指标类数据的统计任务,并将数据加载到MongoDB和ES中;离线推荐服务采用Spark Core+Spark MLlib进行实现,采用ALS算法进行实现,并将处理的数据加载到MongoDB;
所述实时推荐部分:采用Spark Streaming作为实时推荐部分,通过接收Kafka中缓存的数据,基于模型的实时推荐以实现对实时推荐的数据处理,并将处理好的实时推荐结果合并更新到MongoDB数据库。
一种基于Spark的电影推荐方法,包括下述步骤:
(1)当用户打开Web客户端登录时,后台会根据用户是否首次登录为用户提供相应服务;如果用户是首次注册登录,系统会先让用户选择一些自己喜欢的电影类别(电影标签)以便为用户推荐相应类别的电影,解决冷启动问题;若用户是老用户,则会直接进入系统首页位置,系统会根据用户以往信息为用户推荐相应电影;
(2)数据采集部分为Flume+Kafka组合进行实时数据采集;当用户在Web端产生操作数据时,Flume通过读取日志更新,将日志信息推送给Kafka分布式集群进行处理,一方面将数据缓存到MongoDB、Redis,另一方面通过Kafka Stream程序对日志进行过滤处理,获取用户评分数据流(UID|MID|SCORE|TIMESTAMP),并发送到另一个Kafka队列;SparkStreaming监听Kafka队列,实时获取Kafka发送来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;
(3)当实时推荐算法为该用户推荐出适合的个性化电影列表之后,系统将推荐结果实时展现在Web端界面,完成一次实时推荐;
(4)计算完成之后,将新的推荐结构和MongoDB数据库中的推荐结果进行合并;
(5)通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行,定期处理统计的数据并将数据加载到数据存储部分。
优选地,所述步骤(2)中的实时推荐算法具体为:
首先,获取用户u按时间顺序最近的K个评分,记为RK;获取电影p的最相似的K个电影集合,记为S;
然后,对于每个电影q∈S,计算其推荐优先级Euq,计算公式如下:
其中:Rr表示用户u对电影r的评分;sim(q,r)表示电影q与电影r的相似度,设定最小相似度为0.6,当电影q和电影r相似度低于0.6的阈值,则视为两者不相关并忽略;sim_sum表示q与RK中电影相似度大于最小阈值的个数;incount表示RK中与电影q相似的、且本身评分较高(>=3)的电影个数;recount表示RK中与电影q相似的、且本身评分较低(<3)的电影个数;
在计算完每个候选电影q的Euq后,将生成一组<电影q的ID,q的推荐优先级>的列表updatedList;
而在本次为用户u实时推荐之前的上一次实时推荐结果Rec也是一组<电影m,m的推荐优先级>的列表,其大小也为K:
接下来,将updated_S与本次为u实时推荐之前的上一次实时推荐结果Rec进行基于合并、替换形成新的推荐结果NewRec:
New Rec=topK(i∈Rec∪updatedList,cmp=Eui)
其中,i表示updated_S与Rec的电影集合中的每个电影,topK是一个函数,表示从Rec∪updated_S中选择出最大的K个电影,cmp=Eui表示topK函数将推荐优先级Eui值最大的K个电影选出来;最终,NewRec即为经过用户u对电影p评分后触发的实时推荐得到的最新推荐结果。
本发明与现有技术相比具有以下的有益效果:
本发明通过使用MongoDB、ES、Redis作为数据存储部分,同时作为原始数据和离线、实时数据处理的数据存储,大大提高了实时和离线的计算效果;本发明的推荐系统使用基于模型的实时推荐,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐,通过获取数据采集部分推送过来的评分数据,通过Redis获取该用户最近若干次评分,通过从MongoDB获取离线推荐算法计算的与被评分电影最相似的若干部电影,计算出相似的若干部电影分别与从Redis中该用户最近打分的若干部电影的相似度,计算得出一系列候选推荐电影,按照“推荐优先级”这一权重作为衡量,推荐若干部“推荐优先级”靠前的候选电影给用户;通过这种混合实时推荐算法可以根据用户的选择自动进行调整,从而为用户推荐出最贴合更个性化的电影。
附图说明
图1为本发明的系统架构图;
图2为本发明实时推荐算法的流程图;
图3为本发明的Movies【电影数据集】模型示意图;
图4为本发明的Ratings【用户评分表】模型示意图;
图5为本发明的Tag【电影标签表】模型示意图;
图6为本发明的User【用户表】模型示意图;
图7为本发明的Rate More Movies Recently【最近电影评分个数统计表】模型示意图;
图8为本发明的Rate More Movies【电影评分个数统计表】模型示意图;
图9为本发明的Average Movies Score【电影平均评分表】模型示意图;
图10为本发明的Movie Recs【电影相似性矩阵】模型示意图;
图11为本发明的User Recs【用户电影推荐矩阵】模型示意图;
图12为本发明的Stream Recs【用户实时电影推荐矩阵】模型示意图;
图13为本发明的Genres Top Movies【电影类别TOP10】模型示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
如图1~13所示,一种基于Spark的电影推荐系统,包括数据采集部分、数据存储部分、离线推荐部分和实时推荐部分,其中:
所述数据采集部分:通过Web端实时监控用户数据变化,Flume从Web端运行日志中读取日志更新,获取用户对电影的评分情况,将日志信息实时发送Kafka集群,使用Kafka作为流式数据的缓存组件接受来自Flume的数据采集请求,并将数据推送到实时推荐部分;
所述数据存储部分:业务数据库采用文档数据库MongoDB作为主数据库,主要负责平台业务逻辑数据的存储;采用ElasticSearch(ES)作为模糊检索服务器,通过利用ES强大的匹配查询能力实现基于内容的推荐服务;采用Redis作为缓存数据库,用来支撑实时推荐部分对于数据的高速获取需求,存储按照时间从大到小的顺序存入用户的最近评分队列中;
所述离线推荐部分:通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定运行时间完成对任务的触发执行,定期处理统计的数据;离线统计服务批处理统计采用Spark Core+Spark SQL进行实现,实现对指标类数据的统计任务,并将数据加载到MongoDB和ES中;离线推荐服务采用Spark Core+Spark MLlib进行实现,采用ALS算法进行实现,并将处理的数据加载到MongoDB;
所述实时推荐部分:采用Spark Streaming作为实时推荐部分,通过接收Kafka中缓存的数据,基于模型的实时推荐以实现对实时推荐的数据处理,并将处理好的实时推荐结果合并更新到MongoDB数据库。
具体来说,如图1所示,为本发明的系统架构图,该系统框架主要划分为数据采集部分、数据存储部分、离线推荐部分和实时推荐部分;如图3~13所示,该系统基于Spark微批处理框架,各模块之间的数据通过Spark RDD的转换来实现。通过收集静态数据——【电影数据表】,收集动态数据——【用户表】、【用户评分表】、【电影标签表】,通过Spark SQL将【用户表】、【电影数据表】、【用户评分表】、【电影标签表】初始化到MongoDB、ES中以备后续使用。如果是新用户首次登录,会为用户提供交互式的窗口来获取对于影片类型的偏好,为用户推荐相应类别热门电影,解决冷启动问题。离线推荐服务是综合用户所有的历史数据,利用设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率。主要计算一些可以预先进行统计和计算的指标,为实时计算和前端业务相应提供数据支撑。离线推荐服务主要分为统计性算法、基于ALS的协同过滤推荐算法以及基于ElasticSearch的内容推荐算法。通过离线统计服务从MongoDB中加载数据,将【电影平均评分统计】、【电影评分个数统计】、【最近电影评分个数统计】、【电影类别TOP10】四个统计算法进行运行实现,并将计算结果回写到MongoDB中;离线推荐服务从MongoDB中加载数据,通过ALS算法分别将【用户推荐结果矩阵】、【影片相似度矩阵】回写到MongoDB中;通过Azkaban实现对于离线统计服务以离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行以便数据处理。实时推荐部分使用基于模型的实时推荐,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐,通过获取Kafka推送过来的用户评分数据(userId,movieId,score,time Stamp)进行处理,从而获得给用户推荐的合适电影。
一种基于Spark的电影推荐方法,包括下述步骤:
(1)当用户打开Web客户端登录时,后台会根据用户是否首次登录为用户提供相应服务;如果用户是首次注册登录,系统会先让用户选择一些自己喜欢的电影类别(电影标签)以便为用户推荐相应类别的电影,解决冷启动问题;若用户是老用户,则会直接进入系统首页位置,系统会根据用户以往信息为用户推荐相应电影;
(2)数据采集部分为Flume+Kafka组合进行实时数据采集;当用户在Web端产生操作数据时,Flume通过读取日志更新,将日志信息推送给Kafka分布式集群进行处理,一方面将数据缓存到MongoDB、Redis,另一方面通过Kafka Stream程序对日志进行过滤处理,获取用户评分数据流(UID|MID|SCORE|TIMESTAMP),并发送到另一个Kafka队列;SparkStreaming监听Kafka队列,实时获取Kafka发送来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;
如图2所示,所述实时推荐算法为:
当用户u对电影p进行了评分,将触发一次对u的推荐结果的更新。由于用户u对电影p评分,对于用户u来说,他与p最相似的电影们之间的推荐强度将发生变化,所以选取与电影p最相似的K个电影作为候选电影,当然如果用户评分过低,意味着用户对该电影并不感兴趣,系统可以设置为不进行推荐变更,可以通过数据收集部分进行过滤处理。每个候选电影按照“推荐优先级”这一权重作为衡量这个电影被推荐给用户u的优先级。这些电影将根据用户u最近的若干评分计算出各自对用户u的推荐优先级,然后与上次对用户u的实时推荐结果的进行基于推荐优先级的合并、替换得到更新后的推荐结果。
具体来说,首先,获取用户u按时间顺序最近的K个评分,记为RK;获取电影p的最相似的K个电影集合,记为S;
然后,对于每个电影q∈S,计算其推荐优先级Euq,计算公式如下:
其中:Rr表示用户u对电影r的评分;sim(q,r)表示电影q与电影r的相似度,设定最小相似度为0.6,当电影q和电影r相似度低于0.6的阈值,则视为两者不相关并忽略;sim_sum表示q与RK中电影相似度大于最小阈值的个数;incount表示RK中与电影q相似的、且本身评分较高(>=3)的电影个数;recount表示RK中与电影q相似的、且本身评分较低(<3)的电影个数;
公式的意义如下:
首先对于每个候选电影q,从u最近的K个评分中,找出与q相似度较高(>=0.6)的u已评分电影,对于这些电影中的每个电影r,将r与q的相似度乘以用户u对r的评分,将这些乘积计算平均数,作为用户u对电影q的评分预测即:
然后,将u最近的K个评分中与电影q相似的、且本身评分较高(>=3)的电影个数记为incount,计算lgmax{incount,1}作为电影q的“增强因子”,意义在于电影q与u的最近K个评分中的n个高评分(>=3)电影相似,则电影q的优先级被增加lgmax{incount,1}。如果电影q与u的最近K个评分中相似的高评分电影越多,也就是说n越大,则电影q更应该被推荐,所以推荐优先级被增强的幅度较大;如果电影q与u的最近K个评分中相似的高评分电影越少,也就是n越小,则推荐优先级被增强的幅度较小;
而后,将u最近的K个评分中与电影q相似的、且本身评分较低(<3)的电影个数记为recount,计算lgmax{recount,1}作为电影q的“削弱因子”,意义在于电影q与u的最近K个评分中的n个低评分(<3)电影相似,则电影q的优先级被削减lgmax{incount,1}。如果电影q与u的最近K个评分中相似的低评分电影越多,也就是说n越大,则电影q更不应该被推荐,所以推荐优先级被减弱的幅度较大;如果电影q与u的最近K个评分中相似的低评分电影越少,也就是n越小,则推荐优先级被减弱的幅度较小;
最后,将增强因子增加到上述的预测评分中,并减去削弱因子,得到最终的q电影对于u的推荐优先级。
在计算完每个候选电影q的Euq后,将生成一组<电影q的ID,q的推荐优先级>的列表updatedList;
而在本次为用户u实时推荐之前的上一次实时推荐结果Rec也是一组<电影m,m的推荐优先级>的列表,其大小也为K:
接下来,将updated_S与本次为u实时推荐之前的上一次实时推荐结果Rec进行基于合并、替换形成新的推荐结果NewRec:
New Rec=topK(i∈Rec∪updatedList,cmp=Eui)
其中,i表示updated_S与Rec的电影集合中的每个电影,topK是一个函数,表示从Rec∪updated_S中选择出最大的K个电影,cmp=Eui表示topK函数将推荐优先级Eui值最大的K个电影选出来;最终,NewRec即为经过用户u对电影p评分后触发的实时推荐得到的最新推荐结果。
总之,实时推荐算法基本流程如下:
①用户u对电影p进行了评分,触发了实时推荐的一次计算;
②选出电影p最相似的K个电影作为集合S;
③获取用户u最近时间内的K条评分,包含本次评分,作为集合RK;
④计算电影的推荐优先级,产生<qID,qScore>集合updated_S;
将updated_S与上次对用户u的推荐结果Rec进行合并排序,产生新的推荐结果NewRec;作为最终输出。
(3)当实时推荐算法为该用户推荐出适合的个性化电影列表之后,系统将推荐结果实时展现在Web端界面,完成一次实时推荐;
(4)计算完成之后,将新的推荐结构和MongoDB数据库中的推荐结果进行合并;
(5)通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行,定期处理统计的数据并将数据加载到数据存储部分。
本发明通过使用MongoDB、ES、Redis作为数据存储部分,同时作为原始数据和离线、实时数据处理的数据存储,大大提高了实时和离线的计算效果;本发明的推荐系统使用基于模型的实时推荐,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐,通过获取数据采集部分推送过来的评分数据,通过Redis获取该用户最近若干次评分,通过从MongoDB获取离线推荐算法计算的与被评分电影最相似的若干部电影,计算出相似的若干部电影分别与从Redis中该用户最近打分的若干部电影的相似度,计算得出一系列候选推荐电影,按照“推荐优先级”这一权重作为衡量,推荐若干部“推荐优先级”靠前的候选电影给用户;通过这种混合实时推荐算法可以根据用户的选择自动进行调整,从而为用户推荐出最贴合更个性化的电影。
上述为本发明较佳的实施方式,但本发明的实施方式并不受上述内容的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (3)
1.一种基于Spark的电影推荐系统,其特征在于,包括数据采集部分、数据存储部分、离线推荐部分和实时推荐部分,其中:
所述数据采集部分:通过Web端实时监控用户数据变化,Flume从Web端运行日志中读取日志更新,获取用户对电影的评分情况,将日志信息实时发送Kafka集群,使用Kafka作为流式数据的缓存组件接受来自Flume的数据采集请求,并将数据推送到实时推荐部分;
所述数据存储部分:业务数据库采用文档数据库MongoDB作为主数据库,主要负责平台业务逻辑数据的存储;采用ElasticSearch(ES)作为模糊检索服务器,通过利用ES强大的匹配查询能力实现基于内容的推荐服务;采用Redis作为缓存数据库,用来支撑实时推荐部分对于数据的高速获取需求,存储按照时间从大到小的顺序存入用户的最近评分队列中;
所述离线推荐部分:通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定运行时间完成对任务的触发执行,定期处理统计的数据;离线统计服务批处理统计采用Spark Core+Spark SQL进行实现,实现对指标类数据的统计任务,并将数据加载到MongoDB和ES中;离线推荐服务采用Spark Core+Spark MLlib进行实现,采用ALS算法进行实现,并将处理的数据加载到MongoDB;
所述实时推荐部分:采用Spark Streaming作为实时推荐部分,通过接收Kafka中缓存的数据,基于模型的实时推荐以实现对实时推荐的数据处理,并将处理好的实时推荐结果合并更新到MongoDB数据库。
2.一种基于Spark的电影推荐方法,其特征在于,包括下述步骤:
(1)当用户打开Web客户端登录时,后台会根据用户是否首次登录为用户提供相应服务;如果用户是首次注册登录,系统会先让用户选择一些自己喜欢的电影类别(电影标签)以便为用户推荐相应类别的电影,解决冷启动问题;若用户是老用户,则会直接进入系统首页位置,系统会根据用户以往信息为用户推荐相应电影;
(2)数据采集部分为Flume+Kafka组合进行实时数据采集;当用户在Web端产生操作数据时,Flume通过读取日志更新,将日志信息推送给Kafka分布式集群进行处理,一方面将数据缓存到MongoDB、Redis,另一方面通过Kafka Stream程序对日志进行过滤处理,获取用户评分数据流(UID|MID|SCORE|TIMESTAMP),并发送到另一个Kafka队列;Spark Streaming监听Kafka队列,实时获取Kafka发送来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;
(3)当实时推荐算法为该用户推荐出适合的个性化电影列表之后,系统将推荐结果实时展现在Web端界面,完成一次实时推荐;
(4)计算完成之后,将新的推荐结构和MongoDB数据库中的推荐结果进行合并;
(5)通过Azkaban实现对于离线统计服务和离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行,定期处理统计的数据并将数据加载到数据存储部分。
3.根据权利要求2所述基于Spark的电影推荐方法,其特征在于,所述步骤(2)中的实时推荐算法具体为:
首先,获取用户u按时间顺序最近的K个评分,记为RK;获取电影p的最相似的K个电影集合,记为S;
然后,对于每个电影q∈S,计算其推荐优先级Euq,计算公式如下:
其中:Rr表示用户u对电影r的评分;sim(q,r)表示电影q与电影r的相似度,设定最小相似度为0.6,当电影q和电影r相似度低于0.6的阈值,则视为两者不相关并忽略;sim_sum表示q与RK中电影相似度大于最小阈值的个数;incount表示RK中与电影q相似的、且本身评分较高(>=3)的电影个数;recount表示RK中与电影q相似的、且本身评分较低(<3)的电影个数;
在计算完每个候选电影q的Euq后,将生成一组<电影q的ID,q的推荐优先级>的列表updatedList;
而在本次为用户u实时推荐之前的上一次实时推荐结果Rec也是一组<电影m,m的推荐优先级>的列表,其大小也为K:
接下来,将updated_S与本次为u实时推荐之前的上一次实时推荐结果Rec进行基于合并、替换形成新的推荐结果NewRec:
New Rec=topK(i∈Rec∪updatedList,cmp=Eui)
其中,i表示updated_S与Rec的电影集合中的每个电影,topK是一个函数,表示从Rec∪updated_S中选择出最大的K个电影,cmp=Eui表示topK函数将推荐优先级Eui值最大的K个电影选出来;最终,NewRec即为经过用户u对电影p评分后触发的实时推荐得到的最新推荐结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910798202.8A CN110717093B (zh) | 2019-08-27 | 2019-08-27 | 一种基于Spark的电影推荐系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910798202.8A CN110717093B (zh) | 2019-08-27 | 2019-08-27 | 一种基于Spark的电影推荐系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110717093A true CN110717093A (zh) | 2020-01-21 |
CN110717093B CN110717093B (zh) | 2023-04-28 |
Family
ID=69209496
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910798202.8A Active CN110717093B (zh) | 2019-08-27 | 2019-08-27 | 一种基于Spark的电影推荐系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110717093B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111339357A (zh) * | 2020-02-21 | 2020-06-26 | 广州欢网科技有限责任公司 | 基于直播用户行为的推荐方法及装置 |
CN111913996A (zh) * | 2020-07-14 | 2020-11-10 | 中国联合网络通信集团有限公司 | 数据处理方法、装置、设备及存储介质 |
CN112348629A (zh) * | 2020-10-26 | 2021-02-09 | 邦道科技有限公司 | 一种商品信息推送方法和装置 |
CN113852664A (zh) * | 2021-08-19 | 2021-12-28 | 天津市普迅电力信息技术有限公司 | 一种基于分布式实时计算的能源商品及能源需求的精准推送方法 |
DE202023104110U1 (de) | 2023-07-23 | 2023-07-28 | Upasana Adhikari | Intelligentes verschlüsselungsbasiertes System für Filmempfehlungen |
CN116737512A (zh) * | 2023-08-14 | 2023-09-12 | 杭州玳数科技有限公司 | 一种基于Spark的离线任务执行进度计算与获取方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126641A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学技术大学 | 一种基于Spark的实时推荐系统及方法 |
-
2019
- 2019-08-27 CN CN201910798202.8A patent/CN110717093B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126641A (zh) * | 2016-06-24 | 2016-11-16 | 中国科学技术大学 | 一种基于Spark的实时推荐系统及方法 |
Non-Patent Citations (2)
Title |
---|
严磊;汪小可;: "基于Spark流式计算的实时电影推荐研究" * |
岑凯伦;于红岩;杨腾霄;: "大数据下基于Spark的电商实时推荐系统的设计与实现" * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111339357A (zh) * | 2020-02-21 | 2020-06-26 | 广州欢网科技有限责任公司 | 基于直播用户行为的推荐方法及装置 |
CN111913996A (zh) * | 2020-07-14 | 2020-11-10 | 中国联合网络通信集团有限公司 | 数据处理方法、装置、设备及存储介质 |
CN111913996B (zh) * | 2020-07-14 | 2023-07-18 | 中国联合网络通信集团有限公司 | 数据处理方法、装置、设备及存储介质 |
CN112348629A (zh) * | 2020-10-26 | 2021-02-09 | 邦道科技有限公司 | 一种商品信息推送方法和装置 |
CN113852664A (zh) * | 2021-08-19 | 2021-12-28 | 天津市普迅电力信息技术有限公司 | 一种基于分布式实时计算的能源商品及能源需求的精准推送方法 |
DE202023104110U1 (de) | 2023-07-23 | 2023-07-28 | Upasana Adhikari | Intelligentes verschlüsselungsbasiertes System für Filmempfehlungen |
CN116737512A (zh) * | 2023-08-14 | 2023-09-12 | 杭州玳数科技有限公司 | 一种基于Spark的离线任务执行进度计算与获取方法及装置 |
CN116737512B (zh) * | 2023-08-14 | 2023-11-10 | 杭州玳数科技有限公司 | 一种基于Spark的离线任务执行进度计算与获取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110717093B (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110717093B (zh) | 一种基于Spark的电影推荐系统及方法 | |
Zhang et al. | Multi-aspect aware session-based recommendation for intelligent transportation services | |
US20090216741A1 (en) | Prioritizing media assets for publication | |
US20090063984A1 (en) | Customized today module | |
US20180181667A1 (en) | System and method to model recognition statistics of data objects in a business database | |
US9672534B2 (en) | Preparing content packages | |
KR20180053673A (ko) | 비디오 검색용 시청 시간 클러스터링 | |
US9177066B2 (en) | Method and system for displaying comments associated with a query | |
KR101859620B1 (ko) | 온라인 소셜 네트워크에서 신뢰성 기반의 콘텐츠 추천 방법 및 시스템 | |
CN114329207A (zh) | 多业务信息排序系统、方法、存储介质及电子设备 | |
CN110889046A (zh) | 基于卷积神经网络的分布式实时推荐系统 | |
JP5952711B2 (ja) | 予測対象コンテンツにおける将来的なコメント数を予測する予測サーバ、プログラム及び方法 | |
CN112328889A (zh) | 推荐搜索词确定方法、装置、可读介质及电子设备 | |
US20230334314A1 (en) | Content recommendation method and apparatus, device, storage medium, and program product | |
CN116303663A (zh) | 一种基于内容社交平台的用户亲密度计算方法及系统 | |
CN112104910B (zh) | 一种视频搜索方法、装置及系统 | |
CN115062215A (zh) | 多媒体内容推荐方法、装置及存储介质 | |
CN112163163B (zh) | 多算法融合的信息推荐方法、装置和设备 | |
CN114417221A (zh) | 一种基于互联网的大数据运算系统及其实施方法 | |
CN112685647A (zh) | 一种基于大数据的影视个性化服务系统 | |
CN112883143A (zh) | 一种基于Elasticsearch的数字展会搜索方法与系统 | |
CN114329167A (zh) | 超参数学习、智能推荐、关键词和多媒体推荐方法及装置 | |
Ikeda et al. | Predicting online video advertising effects with multimodal deep learning | |
WO2022269994A1 (ja) | 情報判定装置、情報判定方法およびプログラム | |
JP2000348039A (ja) | 情報提供方式及びその方式を用いた情報提供装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |