当前位置:   article > 正文

Spark影评数据分析三_第2关:最喜欢看电影的那位女性评最高分的

第2关:最喜欢看电影的那位女性评最高分的

上一篇我们已经学习了前五个需求如何实现,现在看看后五个。

需求六

package movie
import org.apache.spark.rdd.RDD

//求最喜欢看电影(影评次数最多)的那位女性评最高分的 10 部电影的平均影评分(观影者,电影名,影评分)
object Demand06 {
   
  def main(args: Array[String]): Unit = {
   
    val utils = new Utils
    //(userID,rateTimes)
    val userID_rating = utils.ratingsRdd.map(x=>(x._1,1))   //(userID,1)
      .groupByKey()   //(userID,1,1,1...)
      .map(x=>(x._1,x._2.size) )  //(userID,ratetimes)
    //(userID,sex)
    val userID_sex = utils.usersRdd.map(x=>(x._1,x._2))
    val userID_rating_sex = userID_rating.join(userID_sex)//(userID,(rateTimes,sex))
      .filter(x=>x._2._2=="F")//过滤出女性
      .map(x=>(x._1,x._2._1))
      .sortBy(x=>x._2,false)//按评分次数降序排序
      .take(1)
    println("喜欢看电影(影评次数最多)的那位女性的id和影评次数:")
    userID_rating_sex.foreach(println(_))//输出最喜欢看电影(影评次数最多)的那位女性的id和影评次数
    //这位女性的userID=1150
    val moviesID = utils.ratingsRdd.map(x=>(x._1,x._2,x._3))//(userID,movieID,rating)
      .filter(x=>(x._3=="5" && x._1=="1150"))
      .map(x=>x._2)
    //moviesID.foreach(println(_))//输出这位女性最评分为5的电影ID,接下来求这些电影的平均影评分
    val movieId_rating = utils.ratingsRdd.map(x=>(x._2,x._3.toInt))//(movieID,rating)
      .groupByKey()
      .map(x=>(x._1,x._2.sum*1.0/x._2.size))
    //movieId_rating.take(10).foreach(println(_)
    val result = utils.movieRdd.map(x=>(x._1,x._2))
      .join(movieId_rating)
      .map(x=>("1150",x._2._1,x._2._2))
    println("那位女性评最高分的 10 部电影的平均影评分")
    result.take(10).foreach(println(_))
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

在这里插入图片描述

需求七

package movie
//求好片(评分>=4.0)最多的那个年份的最好看的 10 部电影
object Demand07 {
   
  def main(args: Array[String]): Unit = {
   
    val utils = new Utils
    //(movieID,year)
    val movieID_year = utils.movieRdd.map{
   x=>
      val s =x._2.lastIndexOf("(")
      val e=x._2.lastIndexOf(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/993588
推荐阅读
相关标签
  

闽ICP备14008679号