Spark综合学习笔记(二十五)SparkSQL实战7-电影数据分析

52 篇文章 2 订阅
8 篇文章 0 订阅

学习致谢

https://www.bilibili.com/video/BV1Xz4y1m7cv?p=63

需求:

对电影评分数据进行统计分析,分别使用DSL编程和5QL编程,获取电影平均分Top10,要求电影的评分次数大于200
在这里插入图片描述

代码实现

package sql

import java.util.Properties

import org.apache.spark.sql.{DataFrame, Dataset, SaveMode, SparkSession}

/**
  * Author itcast
  * Desc 演示使用spark-SQL-实现电影数据分析Top10
  * */
  object Demo07_MovieDataAnalysis{
  def main(args: Array[String]): Unit = {
    //TODO 0.准备环境
    val spark = SparkSession.builder().appName("sparksql").master("local[*]")
      .config("spark.sql.shuffle.partitions","4").getOrCreate()//本次测试时分区数设置小一点,实际开发中可以根据集群规模设置大小
    val sc = spark.sparkContext
    sc.setLogLevel("WARN")
    import spark.implicits._
    //TODO 1.加载数据
    val ds: Dataset[String] = spark.read.textFile("data/input/input/rating_100k.data")


    //TODO 2.处理数据
    val movieDS: DataFrame = ds.map(line => {
      val arr: Array[String] = line.split("\t")
      (arr(1), arr(2).toInt)
    }).toDF("movieId", "score")
    movieDS.printSchema()
    movieDS.show()

    //需求:统计评分次数》200的电影平均分top10
    //TODO=======SQL
    //注册表
    movieDS.createOrReplaceTempView("t_movies")
    val sql:String=
      """
                     |selet movieId,avg(score) as avgscore,count(*) as counts
                     |from t_movies
                     |group by movieId
                     |having counts >200
                     |order by avgscore desc
                     |limit 10
                     |""".stripMargin
    spark.sql(sql).show()
    //TODO=======DSL
    import org.apache.spark.sql.functions._
    movieDS.groupBy('movieId)
        .agg(
          avg('score) as "avgscore",
          count("movieId") as "counts"
        ).filter('counts>200)
        .orderBy('avgscore.desc)
        .limit(10)
    //TODO 3.输出数据

    //TODO 4.关闭资源
      spark.close()
  }
}

结果演示

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值