下面的案例中使用的是用户观看电影和点评电影的行为数据,数据来源与网络上的公开数据共有三个数据文件。
users.dat

UserID::Gender::Age::Occupation::Zip-code

ratings.dat

UserID::MovieID::Rating::Timestamp

movies.dat

MovieID::Title::Genres
package chapter1import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}object top10 {def main(args: Array[String]): Unit = {/*** 电影流行度分析:所有电影中平均得分最高(口碑最好)的电影及观看人数最高的电影(流行度最高)* "ratings.dat":UserID::MovieID::Rating::Timestamp* 得分最高的Top10电影实现思路:如果想算总的评分的话一般肯定需要reduceByKey操作或者aggregateByKey操作*   第一步:把数据变成Key-Value,大家想一下在这里什么是Key,什么是Value。把MovieID设置成为Key,把Rating设置为Value;*   第二步:通过reduceByKey操作或者aggregateByKey实现聚合,然后呢?*   第三步:排序,如何做?进行Key和Value的交换**  注意:*   1,转换数据格式的时候一般都会使用map操作,有时候转换可能特别复杂,需要在map方法中调用第三方jar或者so库;*   2,RDD从文件中提取的数据成员默认都是String方式,需要根据实际需要进行转换格式;*   3,RDD如果要重复使用,一般都会进行Cache*   4, 重磅注意事项,RDD的cache操作之后不能直接在跟其他的算子操作,否则在一些版本中cache不生效*/Logger.getLogger("org").setLevel(Level.ERROR)val conf = new SparkConf().setMaster("local[*]").setAppName("test")val sc = new SparkContext(conf)var dataPath = "data/moviedata/medium/"  //数据存放的目录;val usersRDD = sc.textFile(dataPath + "users.dat")val moviesRDD = sc.textFile(dataPath + "movies.dat")val occupationsRDD = sc.textFile(dataPath + "occupations.dat")val ratingsRDD = sc.textFile(dataPath + "ratings.dat")val movieInfo = moviesRDD.map(_.split("::")).map(x => (x(0),x(1))) // (movieId, moveName)val ratingInfo = ratingsRDD.map(_.split("::")).map(x => (x(0),x(1),x(2)))//(userId, movieId,movieSocre)val movidAndRating = ratingInfo.map(x => (x._2,(x._3.toDouble,1))).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).map(x => (x._2._1.toDouble/x._2._2,x._1)).sortByKey(false).take(10).foreach(println)println("所有电影中平均得分最高(口碑最好)的电影:")val ratings= ratingsRDD.map(_.split("::")).map(x => (x(0), x(1), x(2))).cache()  //格式化出电影ID和评分ratings.map(x => (x._2, (x._3.toDouble, 1)))  //格式化成为Key-Value的方式.reduceByKey((x, y) => (x._1 + y._1,x._2 + y._2)) //对Value进行reduce操作,分别得出每部电影的总的评分和总的点评人数.map(x => (x._2._1.toDouble / x._2._2, x._1))  //求出电影平均分.sortByKey(false) //降序排序.take(10) //取Top10.foreach(println) //打印到控制台println("---------------------------------------------")val avg = ratingInfo.map(x => (x._2,(x._3.toDouble,1))).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).map(x => (x._1,x._2._1.toDouble / x._2._2)).join(movieInfo).map(x => (x._2._1,x._2._2)).sortByKey(false).take(10).foreach(record => println(record._2+"的score: "+record._1))val userInfo = usersRDD.map(_.split("::")).map(x => (x(0),x(1)))val userRating = ratingInfo.map(x => (x._1,(x._1,x._2,x._3))).join(userInfo)
//    userRating.take(10).foreach(println)val maleFilterRating = userRating.filter(x => x._2._2.equals("M")).map(x => x._2._1)val fmaleFilterRating = userRating.filter(x => x._2._2.equals("F")).map(x => x._2._1)println("所有电影中男性最喜欢的电影:")maleFilterRating.map(x => (x._2,(x._3.toDouble,1))).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).map(x => (x._1,x._2._1.toDouble / x._2._2)).join(movieInfo).map(x => (x._2._1,x._2._2)).sortByKey(false).take(10).foreach(record => println(record._2+"的score: "+record._1))println("所有电影中性最喜欢的电影:")fmaleFilterRating.map(x => (x._2,(x._3.toDouble,1))).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).map(x => (x._1,x._2._1.toDouble / x._2._2)).join(movieInfo).map(x => (x._2._1,x._2._2)).sortByKey(false).take(10).foreach(record => println(record._2+"的score: "+record._1))println("对电影评分的数据根据TimeStamp和Rating两个维度进行降序:")val pairWithSortKey = ratingsRDD.map(lines => {val splited = lines.split("::")(new SecondrySortKey(splited(3).toDouble, splited(2).toDouble), lines)})pairWithSortKey.sortByKey(false).take(10).map(item=>item._2).foreach(println)sc.stop()}
}
class SecondrySortKey(val first:Double,val second:Double)extends Ordered[SecondrySortKey] with Serializable{override def compare(that: SecondrySortKey): Int = {if((this.first - that.first) != 0){(this.first - that.first).toInt}else{(this.second - that.second).toInt}}
}

RDD实战电影点评系统案例相关推荐

  1. Spark实战电影点评系统(一)

    一.通过RDD实战电影点评系统 日常的数据来源有很多渠道,如网络爬虫.网页埋点.系统日志等.下面的案例中使用的是用户观看电影和点评电影的行为数据,数据来源于网络上的公开数据,共有3个数据文件:uers ...

  2. Spark商业案例与性能调优实战100课》第2课:商业案例之通过RDD实现分析大数据电影点评系统中电影流行度分析

    Spark商业案例与性能调优实战100课>第2课:商业案例之通过RDD实现分析大数据电影点评系统中电影流行度分析 package com.dt.spark.coresimport org.apa ...

  3. 综合项目实战(电影购票系统)

    目录 一.阶段项目实战 1.电影购票系统简介.项目功能演示 2.日志框架搭建.系统角色分析 3.首页设计.登录.商家界面.用户界面实现 4.商家-详情页设计.影片上架.退出 5.商家-影片下架.影片修 ...

  4. 电影点评系统论文java_毕业设计(论文)-基于web的电影点评系统分析与设计.docx...

    毕业设计(论文) 论文题目 基于web的电影点评系统分析与设计 thesis Topic Movie reviews system analysis and design based on web A ...

  5. 移动电影售票系统案例分析

    智能手机及移动互联网的普及,手机购票成为网络购物常见的应用形式之一.本项目名称为:本项目名称为:XX 票务(可以是电影票.演出票-)销售系统,系统目标是实现在线票务发布,销售,验票等一站式票务服务,要 ...

  6. 基于Spark实现电影点评系统用户行为分析—RDD篇(一)

    文章目录 1.项目背景 2.数据描述 3.代码实现 1.项目背景 电影推荐系统(MovieLens)是美国明尼苏达大学(Minnesota)计算机科学与工程学院的GroupLens项目组创办的,是一个 ...

  7. 电影点评系统论文java_java电影在线定制影评管理系统

    文章来源:淘论文网   发布者:毕业设计 浏览量: 影评网系统模块主要包括网站前台管理和管理员后台管理两部分. 网站前台管理包括注册管理.公告查看.投票管理.网站简介,注册管理包括注册会员及信息的管理 ...

  8. 基于Spark实现电影点评系统用户行为分析—DataFrame篇(二)

    文章目录 1.介绍 2.业务统计 3.代码实现 1.介绍 Spark SQL有三种不同实现方式:(1)使用DataFrame与RDD结合的方式.(2)纯粹使用DataFrame的方式.(3)使用Dat ...

  9. 电影点评系统论文java_电影评论网站系统毕业设计(论文)论文参考.doc

    电影评论网站系统毕业设计(论文)论文参考 摘 要 在已跨入21世纪的今天,人类使用和学习信息的方式以及信息的包装方式正在进行着不可阻挡的革命.目前,我国上网的人口已经过亿,是世界上网民最多的国家,许多 ...

最新文章

  1. 通过CH340G驱动的Nano ATMEAG328P驱动板初步测试
  2. 手把手教你EMD算法原理与Python实现(更新)
  3. 在Xcode6中添加prefix.pch文件
  4. SQL Server表分区
  5. stackexchange_通过Spring Social发推StackExchange问​​题
  6. LeetCode 506. 相对名次(map)
  7. 一个demo学会c++编程
  8. 8、网友问答之串口数据接收与数据强制转换---------labview宝典
  9. Linux 用户的手边工具:Guide to Linux
  10. PCB原理图制作一些简单个人总结
  11. 所选的用户密钥未在远程主机上注册,请再试一次
  12. 多文件自平衡云传输(三)节点选择和资源分配 —————— 开开开山怪
  13. 自己写一个strcmp函数(C++)
  14. MultiTech MT9234ZBA 调制解调器Modem的测试方法
  15. 测评丨阿昆说——惊喜发现一款免费的PCB设计分析软件
  16. RationalDMIS 2020高级编程:快速3-2-1构建坐标系
  17. 十六进制文件读取并转换成二进制文件
  18. csv文件查找指定内容
  19. 计算机用户名怎么改好听,电脑维修店名字好听易记
  20. Cris 玩转大数据系列之日志收集神器 Flume

热门文章

  1. 双重游标的使用以及动态游标的使用
  2. 计算机配件及其对应作用,电脑配件与每个配件作用详细完整的解释
  3. 每一页都是干货,送精选15本Python新书,我必须推荐给你
  4. 水星mw310r虚拟服务器,水星MW310R无线路由器固件升级图文教程【详解】
  5. tensorflow-读数据(1)
  6. 浙江大学计算机科学基础题目,浙江大学计算机科学基础试题库精选
  7. Mac上如何截屏以及修改截屏快捷键
  8. 【基础知识】An Implementation of Double-Array Trie
  9. 设计思维 - 收藏集 - 掘金
  10. c语言小游戏10例,C语言的应用 小游戏为例.doc