赞
踩
在上一篇我们已经学习了前五个需求如何实现,现在看看后五个。
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(_)) } }
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(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。