电影推荐系统-[离线统计部分](二)创建Package、类+编写代码(2)【统计近期(按月份)评分最多的电影】
Posted on 2020-09-20 09:16 MissRong 阅读(79) 评论(0) 收藏 举报电影推荐系统-[离线统计部分](二)创建Package、类+编写代码
统计近期(按月份)评分最多的电影
Scala代码:
(1)实际实现类
//二、统计近期热门电影
def rateMoreRecently(spark:SparkSession)(implicit mongoConfig: MongoConfig):Unit={
/**
* UDF--修改日期格式
* 将数据中的长整形-1260759114 转化成" 201912"
*/
val simpleDateFormat=new SimpleDateFormat("yyyyMM")
//建议使用这种写法(JDK 1.8版本以上新升级的):
//val simpleDateFormat=DateTimeFormatter.ofPattern("yyyyMM")
//下面这行最后的转长整形(.toLong)是可有可无的, x*1000L是为了将时间精确到毫秒
spark.udf.register("changeDate",(x:Long)=>simpleDateFormat.format(new Date(x*1000L)).toLong)
val yearMonthOfRatings=spark.sql("select mid,uid,score,changeDate(timastamp) as yearmonth from ratings")
//将读到的数据注册成临时的视图
yearMonthOfRatings.createOrReplaceTempView("ymRatings")
//group by 月份和mid
//排序的时候是按照月份和个数的降序
spark.sql("select mid,count(1) as count,yearmonth from ymRatings group by yearmonth,mid order by yearmonth desc,count desc")
.write
.option("uri",mongoConfig.uri)
.option("collection",RATE_MORE_MOVIES_RECENTLY)
.mode("overwrite")
.format("com.mongodb.spark.sql")
.save()
}
(2)调用类
//六、统计近期热门电影
StatisticsRecommender.rateMoreRecently(spark)
启动MongoDB、执行程序并查看Robo工具

部分代码解释:
时间戳*1000L的含义:


浙公网安备 33010602011771号