IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【Spark】(task2)PySpark数据统计和分组聚合 -> 正文阅读

[大数据]【Spark】(task2)PySpark数据统计和分组聚合

作者:recommend-item-box type_blog clearfix

学习总结

一、数据统计

1.1 读取文件

步骤1:读取文件https://cdn.coggle.club/Pokemon.csv

import pandas as pd
from pyspark.sql import SparkSession
# 创建spark应用
spark = SparkSession.builder.appName('mypyspark').getOrCreate()
# 用python链接spark环境

from pyspark import SparkFiles
spark.sparkContext.addFile('https://cdn.coggle.club/Pokemon.csv')

df = spark.read.csv(SparkFiles.get('Pokemon.csv'), 
                    header = True,
                    inferSchema = True)
df.show(5)

在这里插入图片描述
并且我们将表头属性有.的部分进行更名:

#重命名
df = df.withColumnRenamed('Sp. Atk', 'Sp Atk')
df = df.withColumnRenamed('Sp. Def', 'Sp Def')

df.show(5)

在这里插入图片描述

1.2 保存读取的信息

步骤2:将读取的进行保存,表头也需要保存,这里可保存为csv或者json格式文件。

#df.write
df.write.csv(path='Pokemon.csv',mode='overwrite', header=True )

df.write.json(path='Pokemon.json',mode='overwrite' )

1.3 分析每列的类型,取值个数

步骤3:分析每列的类型,取值个数,这里就可以使用df.describe分析每列的最大值、最小值、平均值、方差等特性了(下面我只贴出HP的结果)。

for column in df.columns:
    df.describe(column).show()

在这里插入图片描述

1.4 分析每列是否包含缺失值

步骤4:分析每列是否包含缺失值,打印出有缺失值的样本数,占总数的比例。

df.filter(df['Type 2'].isNull()).count() # 386

# 转换成pandas,打印出每一列的缺失值个数
df.toPandas().isnull().sum()
# 结果:
Name            0
Type 1          0
Type 2        386
Total           0
HP              0
Attack          0
Defense         0
Sp Atk          0
Sp Def          0
Speed           0
Generation      0
Legendary       0
dtype: int64

打印出有缺失值的样本数,占总数的比例:

for col in df.columns:
    print(col, df.filter(df[col].isNull()).count()/df.count())
    
Name 0.0
Type 1 0.0
Type 2 0.4825
Total 0.0
HP 0.0
Attack 0.0
Defense 0.0
Sp Atk 0.0
Sp Def 0.0
Speed 0.0
Generation 0.0
Legendary 0.0

二、分组聚合

读取文件https://cdn.coggle.club/Pokemon.csv
和刚才的步骤一是一样的。

import pandas as pd
from pyspark.sql import SparkSession
# 创建spark应用
spark = SparkSession.builder.appName('mypyspark').getOrCreate()
# 用python链接spark环境

from pyspark import SparkFiles
spark.sparkContext.addFile('https://cdn.coggle.club/Pokemon.csv')

df = spark.read.csv(SparkFiles.get('Pokemon.csv'), 
                    header = True,
                    inferSchema = True)
df.show(5)

2.1 学习groupby分组聚合的使用

和sql的group by一样意思,分组聚合,下面找到Type 1对应数据进行分组和计数。

# Type 1 各种数量
df.groupby('Type 1').count().show(5)

还可以分组后(按照Type 1分组)计算每组内的HP平均值:

df.groupBy(['Type 1']).avg('HP').show(5)

+------+-----------------+
|Type 1|          avg(HP)|
+------+-----------------+
| Water|          72.0625|
|Poison|            67.25|
| Steel|65.22222222222223|
|  Rock|65.36363636363636|
|   Ice|             72.0|
+------+-----------------+
only showing top 5 rows

而如果是计算每组的个数:

# Type 1 各种数量
df.groupby('Type 1').count().show(5)

+------+-----+
|Type 1|count|
+------+-----+
| Water|  112|
|Poison|   28|
| Steel|   27|
|  Rock|   44|
|   Ice|   24|
+------+-----+
only showing top 5 rows

2.2 学习agg分组聚合的使用

和2.1一样实现分组后(按照Type 1分组)计算每组内的HP平均值,我们也可以用agg分组聚合,{'HP': 'mean'}为参数。

df.groupBy('Type 1').agg({'HP': 'mean'}).show(5)

+------+-----------------+
|Type 1|          avg(HP)|
+------+-----------------+
| Water|          72.0625|
|Poison|            67.25|
| Steel|65.22222222222223|
|  Rock|65.36363636363636|
|   Ice|             72.0|
+------+-----------------+
only showing top 5 rows

当数据量不是很多时,可以使用toPandas转成pandas的dataframe,然后使用pandas的各种函数:

df.toPandas().groupby('Type 1', as_index=False)['HP'].agg({'hp_mean': 'mean'})

在这里插入图片描述

2.3 transform的使用

transform的参数如下,可以看到需要传入一个函数(用于转换数据)。

DataFrame.transform(func: Callable[[], Series], axis: Union[int, str] = 0, *args: Any, **kwargs: Any) → DataFrame

如果我们要按照Type 1分组后,求组内关于HP的平均值,可以将np.mean函数传入transform,具体介绍可以参考pyspark官方文档

df.toPandas().groupby('Type 1')['HP'].transform(np.mean)

0      67.271429
1      67.271429
2      67.271429
3      67.271429
4      69.903846
         ...    
795    65.363636
796    65.363636
797    70.631579
798    70.631579
799    69.903846
Name: HP, Length: 800, dtype: float64

Reference

  • pyspark官方文档
  • https://spark.apache.org/docs/latest/quick-start.html
  • https://spark.apache.org/docs/latest/sql-programming-guide.html
  • https://github.com/apache/spark/tree/4f25b3f712/examples/src/main/python
  • https://sparkbyexamples.com/pyspark-tutorial/
  • https://www.tutorialspoint.com/pyspark/index.htm
  • pyspark—agg的用法
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:14:33  更:2022-03-17 22:15:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:05:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码