package com.bj.scalacodeimport org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession/*** 平均评分最高的10部电影*/
object RDD_Movie_Users_Analyzer2 {def main(args: Array[String]): Unit = {var dataPath="F:\\baidu\\ml-1m"//配置SparkConf,这里指本地运行,并把程序的名字设置为RDD_Movie_Users_Analyzer2val conf=new SparkConf().setMaster("local[*]").setAppName("RDD_Movie_Users_Analyzer2")//Spark2.0 引入SparkSession 封装了SparkContext 和SQLContext ,并且会在//builder 的getOrCreate 方法中判断是否有符合要求的SparkSession 存在,有则使用,没有则进行创建val spark=SparkSession.builder().config(conf).getOrCreate()//获取SparkSession 的SparkContextval sc=spark.sparkContext//把Spark 程序运行时的日志设置为warn 级别,以方便查看运行结果sc.setLogLevel("warn")//把用到的数据加栽进来转换为RDD ,此时使用sc.textFile 并不会读取文件,而是标记了有这个操作,遇到Action 级别算子时才会真正去读取文件val usersRDD=sc.textFile(dataPath+"/users.dat")val moviesRDD=sc.textFile(dataPath+"/movies.dat")val ratingsRDD=sc.textFile(dataPath+"/ratings.dat")//具体的数据处理业务逻辑//打印出所有电影中评分最高的前10 个电影名和平均评分println("所有电影中评分最高(口碑最好)的前10个电影名和平均评分:")//第一步://,从moviesRDD 中取出MovieID 和Name,如果后面的代码重复使用这些数据,则可以把它们缓存起来。// 首先把使用map 算子上面的RDD 中的每一个元素(即文件中的每一行)以"::" 为分隔符进行拆分,// 然后再使用map算子从拆分后得到的数组中取出需要用到的元素,并把得到的RDD 缓存起来。//取出MovieID 和Nameval movieinfo = moviesRDD.map(x=>(x.split("::"))).map(x=>(x(0),x(1))).cache()//从ratingsRDD中取出UserID,MovieID 和ratingval ratings = ratingsRDD.map(_.split("::")).map(x=>(x(0),x(1),x(2),x(3))).cache()//第二步://从ratings 的数据中使用map 算子获取到形如(movieID,(rating,1)格式的RDD,//然后使用reduceByKey 把每个电影的总评分以及点评人数算出来。//ratings.map(x=>(x._1,x._2,x._3,x._4)).take(10).foreach(println)//(1,1193,5,978300760)//ratings.map(x=>(x._2,(x._3,1))).take(10).foreach(println)//(1193,(5,1))//此时得到的RDD 格式为(movieID,(Sum(ratings ),Count(ratings)))(1380,(2923.0,817))val moviesAndRatings = ratings.map(x => (x._2, (x._3.toDouble, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2))//(2828,(255.0,121))//第三步:得到格式为(movieID,(Sum(ratings ),Count(ratings))),// 把每个电影的Sum(ratings)和 Count(ratings)相除,得到包含了电影ID 和平均评分的RDD:val avgRatings = moviesAndRatings.map(x=>(x._1,x._2._1.toDouble/x._2._2))// avgRatings.foreach(println)//得到包含了电影ID 和平均评分的RDD :(2834,3.5555555555555554)//第四步:把avgRatings 与movielnfo 通过关键字key(movieID)连接到一起,得到形如(movieID,(MovieName,AvgRating)) 的RDD ,// 然后格式化为( AvgRating,MovieName ),并按照key (也就是平均评分)降序排列,最终取出前10 个并打印出来。avgRatings.join(movieinfo).map(item=>(item._2._1,item._2._2)).sortByKey(false).take(10).foreach(record=>println(record._2+"平均评分为:"+record._1))//    avgRatings.join(movieinfo).map(item=>(item._2._1,item._2._2)).take(1).foreach(println)
//    //(2.1074380165289255,Dudley Do-Right (1999))
//    println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
//    avgRatings.join(movieinfo).map(item=>(item._1,item._2,item._2._2,item._2._1)).take(1).foreach(println)
//    // (2828,(2.1074380165289255,Dudley Do-Right (1999)),Dudley Do-Right (1999),2.1074380165289255)
//    println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
//
//    avgRatings.take(1).foreach(println)
//    //(2828,2.1074380165289255)
//    println("#################################################################################")
//    movieinfo.take(1).foreach(println)//(1,Toy Story (1995))//最后关闭SparkSessionsc.stop()}
}所有电影中评分最高(口碑最好)的前10个电影名和平均评分:
Schlafes Bruder (Brother of Sleep) (1995)平均评分为:5.0
Gate of Heavenly Peace, The (1995)平均评分为:5.0
Lured (1947)平均评分为:5.0
Bittersweet Motel (2000)平均评分为:5.0
Follow the Bitch (1998)平均评分为:5.0
Song of Freedom (1936)平均评分为:5.0
One Little Indian (1973)平均评分为:5.0
Baby, The (1973)平均评分为:5.0
Smashing Time (1967)平均评分为:5.0
Ulysses (Ulisse) (1954)平均评分为:5.0

获取平均评分最高的10部电影相关推荐

  1. 请访问豆瓣电影网站,爬取4~10部电影信息(电影名、导 演、演员、海报url链接,预报片视频链接),并结合GUI界面展现电影信息,并可以根据选择的电影名, 下载指定预告片视频到本地并显示预告片。GUI

    请访问豆瓣电影网站,爬取4~10部电影信息(电影名.导 演.演员.海报url链接,预报片视频链接),并结合GUI界面展现电影信息,并可以根据选择的电影名, 下载指定预告片视频到本地并显示预告片.GUI ...

  2. 10部电影教你6大沟通术-泡妞MM

    10部电影教你6大沟通术(不可错过的学习机会) 看电影不只享受声光效果.沉浸动人爱情,更可以增进职场人际关系的沟通智慧! 在职场上跟人沟通,会面临的人际关系大致包含以下6种: 1.对老板:展现自我特色 ...

  3. 在电影库中查找演员评分最高的5部电影

    在电影库中查找演员评分最高的5部电影 说在前面的话:其实这个题目有四种办法可以完成,只具体说明两种分别是: 使用Hdfs的Hbase就可以实现.具体是idea这边写代码将数据写入Hbase(要先定义好 ...

  4. 男人必看的10部电影

    男人必看的10部电影 <阿甘正传>课程:执着 每次想起阿甘在美国东西海岸之间的奔跑,心里都会止不住的伤感,还有振奋. 你相信一个智障儿的成功吗?你相信这世上得到最多的人正是那些不计得失的人 ...

  5. 实现用户对电影评分,包括不超过10部电影和5个用户,每部电影包括电影编号、名称和得分(1-5),用户评分完成后,输出各电影的得分以及最受欢迎电影。

    电影总数和各个电影的信息,包括名称和5个用户的相应评分 提示语句的输出格式如下: printf("Enter the num of films: "); printf(" ...

  6. 最适合程序员口味的10部电影

    在不同的领域有时有着同样的概念.有大量的计算机编程中的概念出现在电影当中.不乏很酷的电影,但它甚至能帮助程序开发者理解编程中的一些概念. 1.黑客帝国(The Matrix ) 1999 概念:在线/ ...

  7. 职场要看的10部电影

    <当幸福来敲门> 你刚刚拿到大学文凭,雄心勃勃,希望在事业上大展身手,可是找工作的过程渐渐泯灭了你的雄心.比你有学历.有能力.有势力的人多如牛毛,四处碰壁后怎么办?这时候,你可以看这部片子 ...

  8. 职场智慧:10部电影教你6大沟通术

    我自己很喜欢电影,也在电影公司工作过,在电影里我看到很多值得跟大家分享的职场智慧. 在职场上跟人沟通,会面临的人际关系大致包含以下6种: 1 对老板:展现自我特色 米歇尔.菲佛(Michelle Pf ...

  9. 电影案例[求平均分,评分最高的N条记录,.每部电影的点击次数(求热门)]

    3.3.2.2.每部电影的平均分 /** 求每部电影的平均分 @author DOIT_HANG_GE @version 2019年2月26日 */ public class MovieAvgRate ...

最新文章

  1. python提高办公效率的例子_怎样的办公室设计更利于提高工作效率
  2. 基于linux的java学习,Java学习---Linux总结
  3. 如何调用webservice接口
  4. 记-curl post json数据,服务器后端$_POST接收不到数据
  5. php是范例,php基础范例
  6. mui开发项目流程_【经验分享】用HBuilder开发的基于MUI和H5+的APP开发及上架经历...
  7. html5嵌套css语言,HTML5和CSS3
  8. MacOS下IDEA设置智能提示不区分大小写
  9. qml 不刷新 放大还原_【显示器选择详解】你的电脑能否带动高分辨率,高刷新率显示器?...
  10. CentOS6编译装载nbd模块
  11. 武器系统仿真技术(二):末端制导系统蒙特卡洛仿真法
  12. idea中常用快捷键
  13. pantum打印机驱动安装m6506_奔图m6506驱动下载|
  14. 理解 this.initialize.apply ( this, arguments )
  15. #define 喵 int_【吃鸡大作战第三季】第12集 告白小雪喵
  16. 通达信筹码循环指标源码 显示吸筹拉升出货的过程
  17. 《我也能做CTO之程序员职业规划》之十六:逆商
  18. 如果要你向别人推荐电影,你最先想到的是那些呢?
  19. 【仿真】羽毛球空气动力学运动方程分析
  20. 产品经理也要懂ASO

热门文章

  1. Eclipse oxygen 版本汉化教程
  2. http状态码301和302详解及区别——辛酸的探索之路
  3. 我多想时光都可以典当,你回来带我赎回过往
  4. android camera 工作原理,Android Camera原理之openCamera模块(一)
  5. 领域模型和领域对象的概念
  6. LaTex常用包及其功能
  7. C语言 switch语句
  8. 织梦PHP版本怎么更新,织梦DedeCMS系统如何打补丁升级
  9. 计算机组成原理学习笔记————计算机指令,MIPS指令集,存储器操作数,数据传送指令,取数存数指令
  10. 重磅:小程序将可分享到朋友圈啦!