九十二、Spark-SparkSQL(统计电影平均分Top10)

简介: 九十二、Spark-SparkSQL(统计电影平均分Top10)

对电影评分数据进行分析,使用SQL编程,获取电影平均分Top10,要求电影的评分次数大于200


数据展示


1.png


代码


package org.example.SQL
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
//电影数据分析
object sql_Movie {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.ERROR)
    val spark: SparkSession = SparkSession.builder().appName("sparksql").master("local[*]")
      .config("spark.sql.shuffle.partitions", 4)
      .getOrCreate()
    import spark.implicits._
    val ds: Dataset[String] = spark.read.textFile("data/text/rating_100k.data")
    //    ds.printSchema()
    //    ds.show()
    val movies: DataFrame = ds.map(line => {
      val arr: Array[String] = line.split("\t")
      (arr(1), arr(2).toInt)
    }).toDF("movieid", "score")
    movies.printSchema()
    movies.show()
    //统计 评分次数>200的电影平均分Top10
    movies.createOrReplaceTempView("movie")
    var sql =
      """
      select movieid,count(*) as counts,avg(score) as avgs
      from movie
      group by movieid
      having counts >200
      order by avgs
      limit 10
    """.stripMargin
    spark.sql(sql).show()
  }
}

数据打印


+-------+-----+
|movieid|score|
+-------+-----+
|    242|    3|
|    302|    3|
|    377|    1|
|     51|    2|
|    346|    1|
|    474|    4|
|    265|    2|
|    465|    5|
|    451|    3|
|     86|    3|
|    257|    2|
|   1014|    5|
|    222|    5|
|     40|    3|
|     29|    3|
|    785|    3|
|    387|    5|
|    274|    2|
|   1042|    4|
|   1184|    2|
+-------+-----+

结果输出


+-------+------+------------------+
|movieid|counts|              avgs|
+-------+------+------------------+
|    678|   219| 2.808219178082192|
|    235|   217| 2.847926267281106|
|    323|   240| 2.933333333333333|
|    289|   259|2.9806949806949805|
|    546|   254| 3.031496062992126|
|    322|   218|3.0871559633027523|
|    245|   240|3.1083333333333334|
|    748|   316|3.1234177215189876|
|    597|   206| 3.150485436893204|
|    294|   485| 3.156701030927835|
+-------+------+------------------+
相关文章
|
5月前
|
SQL 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)
【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)
80 0
|
SQL 分布式计算 数据挖掘
PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解
PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解
535 0
PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解
|
3月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
|
11月前
|
分布式计算 Hadoop Java
【Big Data】Hadoop--MapReduce经典题型实战(单词统计+成绩排序+文档倒插序列)
🍊本文使用了3个经典案例进行MapReduce实战🍊参考官方源码,代码风格较优雅🍊解析详细。
159 0
|
12月前
|
存储 分布式计算 Java
JAVA Spark rdd使用Spark编程实现:统计出每个省份广 告被点击次数的TOP3
JAVA Spark rdd使用Spark编程实现:统计出每个省份广 告被点击次数的TOP3
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(十五):查找最值所在行数据信息及快速计算总和百之max/min() keep() over()、fisrt_value、last_value、ratio_to_report
本篇文章讲解的主要内容是:***计算部门中那个工资等级的员工最多、通过返回部门10最大工资所在行的员工名称小案例来讲解max/min() keep() over()、通过查询工资最高的人小案例来介绍fisrt_value、last_value、通过计算各个部门的工资合计以及各个部门合计工资占总工资的比例小案例来介绍如何计算百分比及ratio_to_report分析函数的使用***
【SQL开发实战技巧】系列(十五):查找最值所在行数据信息及快速计算总和百之max/min() keep() over()、fisrt_value、last_value、ratio_to_report
DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
|
消息中间件 传感器 分布式计算
【Spark】Spark Dataframe 对项目中的数据实现列转行操作
【Spark】Spark Dataframe 对项目中的数据实现列转行操作
478 0
【Spark】Spark Dataframe 对项目中的数据实现列转行操作
|
关系型数据库 MySQL 数据库
【MySQL作业】sum、max 和 min 聚合函数——美和易思聚合函数应用习题
【MySQL作业】sum、max 和 min 聚合函数——美和易思聚合函数应用习题
92 0
【MySQL作业】sum、max 和 min 聚合函数——美和易思聚合函数应用习题
|
SQL JSON 分布式计算
【Spark】(task2)PySpark数据统计和分组聚合
1.2 保存读取的信息 步骤2:将读取的进行保存,表头也需要保存,这里可保存为csv或者json格式文件。
604 0
【Spark】(task2)PySpark数据统计和分组聚合