电影评分数据分析案例-Spark SQL

news/2025/3/15 19:15:39/

# cording:utf8from pyspark.sql import SparkSession
from pyspark.sql.types import IntegerType, StringType, StructType
import pyspark.sql.functions as Fif __name__ == '__main__':# 0.构建执行环境入口对象SparkSessionspark = SparkSession.builder.\appName('movie_demo').\master('local[*]').\getOrCreate()sc = spark.sparkContext# 1.读取文件schema = StructType().add('user_id', StringType(), nullable=True). \add('movie_id', IntegerType(), nullable=True).\add('rank', IntegerType(), nullable=True).\add('ts', StringType(), nullable=True)df = spark.read.format('csv').\option('sep', '\t').\option('header', False).\option('encoding', 'utf-8').\schema(schema=schema).\load('../input/u.data')# TODO 1:用户平均分df.groupBy('user_id').\avg('rank').\withColumnRenamed('avg(rank)', 'avg_rank').\withColumn('avg_rank', F.round('avg_rank', 2)).\orderBy('avg_rank', ascending=False).\show()# TODO 2:电影的平均分查询df.createTempView('movie')spark.sql('''SELECT movie_id, ROUND(AVG(rank),2) as avg_rank FROM movie GROUP BY movie_id ORDER BY avg_rank DESC''').show()# TODO 3:查询大于平均分的电影数量print('大于平均分电影数量为:', df.where(df['rank'] > df.select(F.avg('rank')).first()['avg(rank)']).count())# TODO 4:查询高分电影中(>3)打分次数最多的用户,此人打分的平均分# 找出打分次数最多的人user_id = df.where('rank>3').\groupBy('user_id').\count(). \withColumnRenamed('count', 'cnt').\orderBy('cnt', ascennding=False).\limit(1).\first()['user_id']# 算平均分df.filter(df['user_id'] == user_id).\select(F.round(F.avg('rank'), 2)).show()# TODO 5: 查询每个用户的平均分打分,最低打分,最高打分df.groupBy('user_id').\agg(F.round(F.avg('rank'), 2).alias('avg_rank'),F.min('rank').alias('min_rank'),F.max('rank').alias('max_rank')).show()# TODO 6:查询评分超过100次的电影的平均分 排名TOP10df.groupBy('movie_id').\agg(F.round(F.count('movie_id'),2).alias('cnt'),F.round(F.avg('rank'),2).alias('avg_rank')).\where('cnt > 100').\orderBy('avg_rank', ascending=False).\limit(10).\show()'''
1.agg:它是GroupedData对象的API,作用是:在里面可以写多个聚合
2.alias:它是Column对象的API,可以针对一个列进行改名
3.withColumnRenamed:它是DataFrame的API,可以对DF中的列进行改名,一次改一个列,改多个列可以链式调用
4.orderBy:DataFrame的API,进行排序,参数1是被排序的列,参数2是 升序(True)或降序(False)
5.first:DataFrame的API,取出DF的第一行数据,返回值结果是Row对象
## Row对象:就是一个数组,可以通过row['列名']来取出当前行中,某一列具体数值,返回值不再是DF 或者GroupedData 或者Column 而是具体的值(字符串、数字等)
'''

1.

2.

3.

4.

5.

6.


http://www.ppmy.cn/news/1172930.html

相关文章

Ubuntu挂载NFS(Network File System) ,怎么解决权限不一致的问题?

文章目录 1,挂载时,使用noacl选项2,挂载时,使用all_squash选项3,检查文件夹权限755 权限说明 4,查看错误消息推荐阅读 在Ubuntu上挂载NFS(Network File System) 1共享目录时,权限不一致问题可能…

强大的虚拟机软件 VMware Fusion Pro 13中文最新 for mac

VMware Fusion Pro是一款虚拟化软件,它允许在Mac电脑上同时运行Windows和其他操作系统,而无需重启电脑,它采用了领先的虚拟化技术,能够保证在Mac电脑在同时运行多个操作系统时表现出极高的效率和稳定性。 VMware Fusion Pro具有以…

编程小白的自学笔记十七(python办公自动化操作EXCEL表格之作图)

系列文章目录 编程小白的自学笔记十六(python办公自动化操作EXCEL表格) 编程小白的自学笔记十五(python办公自动化操作EXCEL表格) 编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹 编程小白…

uniapp canvas 无法获取 webgl context 的问题解决

uniapp canvas 无法获取 webgl context 的问题解决 一、问题描述 在 uniapp 中做一个查看监控视频的页面,用到的是 JSMpeg 这个库,原理就是前后台通过 websocket 不断推送新画面内容到前端,前端通过这个 JSMpeg 渲染到前端页面中指定的 can…

React 中 keys 的作用是什么?

目录 前言:React 中的 Keys 的重要性 为什么 Keys 重要? 详解:key 属性的基本概念 用法:key 属性的示例 解析:key 属性的优势和局限性 优势: 局限性: key 属性的最佳实践 稳定的唯一标…

前端性能优化 - 虚拟滚动

一 需求背景 需求:在一个表格里面一次性渲染全部数据,不采用分页形式,每行数据都有Echart图插入。 问题:图表渲染卡顿 技术栈:Element UI 卡顿原因:页面渲染时大量的元素参与到了重排的动作中,…

kafka单机部署

进入/home/appuser/application文件夹,将kafka安装包上传至此处 解压安装包并改名: tar -xvf kafka_2.13-3.3.1.tgz mv kafka_2.13-3.3.1.tgz kafka 在kafka文件夹下创建zookeeper数据文件夹,kafka和zookeeper的日志文件存放文件夹&#x…

Mysql 事务的实现原理

Mysql 里面的事务,满足 ACID 特性,所以Mysql 的事务实现原理,就是InnoDB 是如何保证 ACID 特性的。 ACID A 表示 Atomic 原子性,也就是需要保证多个 DML 操作是原子的,要么都成功,要么都失败。那么&#xf…