Spark课程设计——电影推荐系统

这篇具有很好参考价值的文章主要介绍了Spark课程设计——电影推荐系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目所需数据集及相应信息描述:
数据集:
1、用户评分数据集ratings.dat:包含了大量用户的历史评分数据。
2、样本评分数据集personalRatings.dat:包含了少数几个用户的个性化评分数据,这些数据反映了某个用户的个性化观影喜好。
3、电影数据集movies.dat:包含了每部电影的相关信息。
注意:
之后依次使用数据集1~3表示上述数据集
数据集结构如下:
1、用户ID::电影ID::评分::时间戳
2、用户ID::电影ID::评分::时间戳
3、电影ID::电影名称::电影类型

(1)movies.dat数据集部分展示:
Spark课程设计——电影推荐系统
(2)ratings.dat数据集部分展示:
Spark课程设计——电影推荐系统
题目要求:
1、根据数据集3,计算每年发行电影的数量,并进行可视化(柱状图)。
2、根据数据集1,计算每部电影的平均分,并进行可视化(柱状图)。
3、根据数据集1,将电影评分离散化,[0,2)为差,[2-4)为良好,[4-5)为优秀,并进行可视化(饼图)。
4、根据数据集3,统计每种类型电影的数量(若一个电影有多个分类,选择第一个),并进行可视化(饼图)。
5、根据数据集1、2,自行挑选用户(用户id),使用协同过滤算法为其推荐十部电影,无需可视化,只需运行结果。

实验思路及代码:

(1)第一小题思路(流程图)
Spark课程设计——电影推荐系统
代码:

//计算每年发行电影的数量
 val rdd1 = sc.textFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/movies.txt")
//先将每行元素按照::进行分割,然后取出包含年份的那个字段
 val rdd2 = rdd1.map(line=>line.split("::")(1))
//获取年份(使用两次反转)
 val rdd3 = rdd2.map(line=>line.reverse.take(5))
 val rdd4 = rdd3.map(line=>line.reverse.take(4))
//计算每年发行电影的数量
val rdd_result = rdd4.map(word=>(word,1)).reduceByKey(_+_)
//进行格式化
val rdd_show = rdd_result.map(line=>line._1+"年,有"+line._2+"份电影")
//将结果输出到文件夹当中
rdd_show.saveAsTextFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/Test1")

结果展示:
Spark课程设计——电影推荐系统

(2)第二小题思路
Spark课程设计——电影推荐系统
代码:

//提取每个电影以及对应的评分,形成一个元组
val rdd3_2 = rdd3_1.map(line=>(line.split("::")(1),line.split("::")(2).toInt))
//对应rdd3_2的value进行操作,key不动
val rdd3_3 = rdd3_2.mapValues(x=>(x,1))
//将相同的电影的评分进行求平均
val rdd3_4 = rdd3_3.reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).mapValues(x=>x._1/x._2)
//将结果进行保存
rdd3_4.saveAsTextFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/Test3")

结果展示:
Spark课程设计——电影推荐系统

(3)第三小题思路
Spark课程设计——电影推荐系统
代码:

//读取数据
val rdd2_1 = sc.textFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/ratings.txt")
//获取评分 
val rdd2_2 = rdd2_1.map(line=>line.split("::")(2))
//将评分转化为整数
val rdd2_3 = rdd2_2.map(line=>line.toInt)
//对评分进行离散化
val rdd2_4 = rdd2_3.map(line=>if (line>=0&&line<2) "差" else if(line>=2&&line<4) "良好" else if(line>=4&&line<=5) "优秀")
//将结果进行统计
 val rdd2_5 = rdd2_4.map(line=>(line,1)).reduceByKey(_+_)
//将结果进行展示
rdd2_5.foreach(println)

结果展示:
Spark课程设计——电影推荐系统

(4)第四小题思路:
Spark课程设计——电影推荐系统
代码:

//对movies数据集进行读取
val rdd4_1 = sc.textFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/movies.txt")
//转换成只包含类型数据的RDD
 val rdd4_2 = rdd4_1.map(line=>line.split("::")(2))
//当遇到一个电影有多个类型的时候只选取其中第一个类型
val rdd4_3 = rdd4_2.map(line=>line.split(",")(0))
//统计每种类型电影的数量
 val rdd4_4 = rdd4_3.map(line=>(line,1)).reduceByKey(_+_)
//将数据保存
 rdd4_4.saveAsTextFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/Test4")

结果展示:
Spark课程设计——电影推荐系统

(5)第五小题思路:
Spark课程设计——电影推荐系统
代码:

//导入文件生成RDD
val rdd5_1 = sc.textFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/ratings.txt"
)
//定义样例类,用来隐式转换
case class Rating(userId:Int,movieId:Int,rating:Float,timestamp:Long)
//反射机制推断RDD来生成DataFrame
val rdd5_2 = rdd5_1.map(line=>Rating(line.split("::")(0).toInt,line.split("::")(1).toInt,line.split("::")(2).toFloat,line.split("::")(3).toLong)).toDF()
//将数据集按4:1划分成训练集和测试集
val Array(train,test) = rdd5_2.randomSplit(Array(0.8,0.2))
//创建model
val model = new ALS().setMaxIter(10).setRegParam(0.03).setUserCol("userId").setItemCol("movieId").setRatingCol("rating")
//训练生成模型
val train_model = model.fit(train)
//模型进行测试
val test_rdd = train_model.transform(test)
//注册为临时表
test_rdd.createOrReplaceTempView("result")
//查找用户id为1的
val result_rdd = spark.sql("select userId,movieId,prediction as rating from result where userId=1")
//按照rating进行降序排列
result_rdd.sort(result_rdd("rating").desc).show()
//读取movies文件
 val movie_rdd = sc.textFile("C:/Users/ch/Desktop/大学/大三阶段/spark/spark实验/课程设计/题目/实验数据集/movies.tx
t")
//创建样例类进行隐式转换
 case class Movie(movieId:Int,name:String,movieType:String)
val movie_DF = movie_rdd.map(line=>Movie(line.split("::")(0).toInt,line.split("::")(1),line.split("::")(2))).toDF()
//将用户表进行注册
val user_movie = result_rdd.sort(result_rdd("rating").desc)
//注册为临时表
movie_DF.createOrReplaceTempView("movie")
user_movie.createOrReplaceTempView("user")
//两张表进行关联
scala> val result = spark.sql("select movieId,name from movie where movieId = 1287 or movieId=1035 or movieId=3105 or movieId=2355 or movieId=150 or movieId=1 or movieId=1961 or movieId=1028 or movieId=1029 or movieId=1270")
//结果展示(为用户1推荐的电影)
result.map(line=>"MovieId:"+line(0)+","+"MovieName:"+line(1)).show()
result.map(line=>"MovieName:"+line(1)).show()
result.show()

结果展示:
Spark课程设计——电影推荐系统文章来源地址https://www.toymoban.com/news/detail-465598.html

到了这里,关于Spark课程设计——电影推荐系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java+SpringMVC+Mybaties+layui+Vue+elememt基于协同过滤的电影推荐系统的设计与实现

           基于协调过滤的电影推荐系统的设计与实现                 本系统分为普通用户以及管理员两类                         普通用户: 登录系统查看最新推荐电影、收藏、评论、查看电影信息、                                 对电

    2024年02月12日
    浏览(29)
  • 计算机毕业设计springboot基于Hadoop平台的电影推荐系统541039【附源码+数据库+部署+LW】

    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。 系统的选题背景和意义 选题背景: 随着互联网的快速发展和大数据技术的成熟应用,电影推荐系统成为了电影行业中不可或缺的一部分。基于Hadoop平台的电影推荐系统应运而生,

    2024年02月06日
    浏览(46)
  • 基于Spark+django的国漫推荐系统--计算机毕业设计项目

    近年来,随着互联网的蓬勃发展,企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,基于Spark的国漫推荐系统的建设也逐渐进入了信息化的

    2024年02月11日
    浏览(32)
  • 【电影推荐系统】实时推荐

    技术方案: 日志采集服务:通过利用Flume-ng对业务平台中用户对于电影的一次评分行为进行采集,实时发送到Kafka集群。 消息缓冲服务:项目采用Kafka作为流式数据的缓存组件,接受来自Flume的数据采集请求。并将数据推送到项目的实时推荐系统部分。 实时推荐服务:项目采

    2024年02月14日
    浏览(21)
  • 机器学习30:《推荐系统-III》使用 TensorFlow 构建电影推荐系统

    本文将介绍基于 MovieLens 数据集创建一个电影推荐系统的方法。具体而言,包括探索电影数据,训练矩阵分解模型,检查嵌入,矩阵分解中的正则化,Softmax 模型训练等内容。 目录 1.准备工作 1.1 导入依赖模块 1.2 加载数据 1.3 探索电影镜头数据

    2024年02月16日
    浏览(32)
  • 基于android的毕业设计题目推荐

    基于android的毕业设计题目1-10题 1、基于Android与ZigBee无线传感器网络的档案库房智能管理平台设计 2、基于Android的农机调度与管理平台设计与应用 3、基于Android的“智慧旅游”手机APP开发 4、基于Android系统的空调外机控制器综合测试系统的设计与应用 5、基于Android平台的智能

    2024年02月12日
    浏览(26)
  • Django个性化推荐系统,以电影为例

    随着科学技术发展,电脑已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。电影个性化推荐信息管理一直是信息管理的一大难题

    2024年02月01日
    浏览(30)
  • 嵌入式毕业设计选题推荐 题目汇总

    🥇 近期不少学弟学妹询问学长关于单片机和嵌入式相关的毕设选题,学长特意写下这篇文章以作回应! 以下是学长亲手整理的嵌入式相关的毕业设计选题,都是经过学长精心审核的题目,适合作为毕设,难度不高,工作量达标,对毕设有任何疑问都可以问学长哦! 学长整理

    2024年02月05日
    浏览(35)
  • [皮尔逊相关系数corrwith]使用案例:电影推荐系统

    协同过滤算法用于发现用户与物品之间的相关性,主要有两种:基于用户的和基于物品的。 基于用户: 用户1购买了物品A、B、C、D,并给了好评;而用户2也买了A、B、C,那么认为用户1和用户2是同类型用户,也可以把D推荐给用户2。 基于物品: 物品A和物品B都被用户1、2、

    2024年02月10日
    浏览(28)
  • 基于协同过滤算法的电影推荐系统(亮点:智能推荐、协同过滤算法、在线支付、视频观看)

    💗 博主介绍 :✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅 👇🏻 2023-2024年最值得选的微信小程序毕业设

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包