SparkSql之电影案例SQL编写

需求1:查找电影评分个数超过50,且平均评分较高的前十部电影名称及其对应的平均评分,结果以下面字段结构输出,保存成任意文本格式(txt\csv)或者存储到数据库。

 // 需求1:查找电影评分个数超过50,且平均评分较高的前十部电影名称及其对应的平均评分,
    val sql1 =
    """
      |select
      |   r.movieId movie_id, count(r.movieId) rating_num, first(m.title) title, avg(r.rating) as rating_avg,from_unixtime(first(r.timestamp), 'yyyy-MM-dd HH:mm:ss') update_time
      |from
      |   ratings r left join movies m
      |where
      |   r.movieId=m.movieId
      |group by
      |   r.movieId having rating_num > 50 sort by rating_avg desc limit 10
      |""".stripMargin

需求2:查找每个电影类别及其对应的平均评分,结果以下面字段结构输出,保存成任意文本格式(txt\csv)或者存储到数据库。

val sql2 =
      """
        |select
        |   first(m.genres) genre, avg(r.rating) rating_avg,from_unixtime(first(r.timestamp), 'yyyy-MM-dd HH:mm:ss') update_time
        |from
        |   ratings r left join movies m
        |where
        |   r.movieId=m.movieId
        |group by r.movieId
        |""".stripMargin

需求3:查找被评分次数较多的前十部电影,结果以下面字段结构输出,保存成任意文本格式(txt\csv)或者存储到数据库。

 val sql3 =
      """
        |select
        |   r.movieId movie_id, first(m.title) title, count(r.userId) rating_num, from_unixtime(first(r.timestamp), 'yyyy-MM-dd HH:mm:ss') update_time
        |from
        |   ratings r left join movies m
        |where
        |   r.movieId=m.movieId
        |group by r.movieId sort by rating_num desc limit 10
        |""".stripMargin

运行环境准备

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("exercise2").setMaster("local[*]")
    val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()
    val dfRating: DataFrame = spark.read.option("header", true).csv("exercise2/ratings.csv")  // 自己数据的路径
    val dfMovie: DataFrame = spark.read.option("header", true).csv("exercise2/movies.csv") // 自己数据的路径
    dfRating.createOrReplaceTempView("ratings")
    dfMovie.createOrReplaceTempView("movies")
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值