【Spark】(task2)PySpark數(shù)據(jù)統(tǒng)計(jì)和分組聚合

      網(wǎng)友投稿 1225 2025-04-02

      學(xué)習(xí)總結(jié)


      文章目錄

      學(xué)習(xí)總結(jié)

      一、數(shù)據(jù)統(tǒng)計(jì)

      1.1 讀取文件

      1.2 保存讀取的信息

      1.3 分析每列的類型,取值個(gè)數(shù)

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

      二、分組聚合

      2.1 學(xué)習(xí)groupby分組聚合的使用

      2.2 學(xué)習(xí)agg分組聚合的使用

      2.3 transform的使用

      Reference

      一、數(shù)據(jù)統(tǒng)計(jì)

      1.1 讀取文件

      步驟1:讀取文件https://cdn.coggle.club/Pokemon.csv

      import pandas as pd from pyspark.sql import SparkSession # 創(chuàng)建spark應(yīng)用 spark = SparkSession.builder.appName('mypyspark').getOrCreate() # 用python鏈接spark環(huán)境 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)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      并且我們將表頭屬性有.的部分進(jìn)行更名:

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

      1

      2

      3

      4

      5

      1.2 保存讀取的信息

      步驟2:將讀取的進(jìn)行保存,表頭也需要保存,這里可保存為csv或者json格式文件。

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

      1

      2

      3

      4

      1.3 分析每列的類型,取值個(gè)數(shù)

      步驟3:分析每列的類型,取值個(gè)數(shù),這里就可以使用df.describe分析每列的最大值、最小值、平均值、方差等特性了(下面我只貼出HP的結(jié)果)。

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

      1

      2

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

      步驟4:分析每列是否包含缺失值,打印出有缺失值的樣本數(shù),占總數(shù)的比例。

      df.filter(df['Type 2'].isNull()).count() # 386 # 轉(zhuǎn)換成pandas,打印出每一列的缺失值個(gè)數(shù) df.toPandas().isnull().sum() # 結(jié)果: 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

      【Spark】(task2)PySpark數(shù)據(jù)統(tǒng)計(jì)和分組聚合

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      打印出有缺失值的樣本數(shù),占總數(shù)的比例:

      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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      二、分組聚合

      讀取文件https://cdn.coggle.club/Pokemon.csv

      和剛才的步驟一是一樣的。

      import pandas as pd from pyspark.sql import SparkSession # 創(chuàng)建spark應(yīng)用 spark = SparkSession.builder.appName('mypyspark').getOrCreate() # 用python鏈接spark環(huán)境 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)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      2.1 學(xué)習(xí)groupby分組聚合的使用

      和sql的group by一樣意思,分組聚合,下面找到Type 1對(duì)應(yīng)數(shù)據(jù)進(jìn)行分組和計(jì)數(shù)。

      # Type 1 各種數(shù)量 df.groupby('Type 1').count().show(5)

      1

      2

      還可以分組后(按照Type 1分組)計(jì)算每組內(nèi)的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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      而如果是計(jì)算每組的個(gè)數(shù):

      # Type 1 各種數(shù)量 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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      2.2 學(xué)習(xí)agg分組聚合的使用

      和2.1一樣實(shí)現(xiàn)分組后(按照Type 1分組)計(jì)算每組內(nèi)的HP平均值,我們也可以用agg分組聚合,{'HP': 'mean'}為參數(shù)。

      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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      當(dāng)數(shù)據(jù)量不是很多時(shí),可以使用toPandas轉(zhuǎn)成pandas的dataframe,然后使用pandas的各種函數(shù):

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

      1

      2.3 transform的使用

      transform的參數(shù)如下,可以看到需要傳入一個(gè)函數(shù)(用于轉(zhuǎn)換數(shù)據(jù))。

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

      1

      如果我們要按照Type 1分組后,求組內(nèi)關(guān)于HP的平均值,可以將np.mean函數(shù)傳入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

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      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的用法

      spark

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel工作表格怎么設(shè)置保護(hù)密碼(excel工作表保護(hù)默認(rèn)密碼)
      下一篇:excel表格取消分頁效果的教程(如何取消excel表格中的分頁)
      相關(guān)文章
      亚洲色欲一区二区三区在线观看| 亚洲精品国产情侣av在线| 亚洲国产精品国自产电影| 国产精品亚洲玖玖玖在线观看| 亚洲熟妇av午夜无码不卡| 亚洲伦理中文字幕| 亚洲欧洲日韩极速播放| 亚洲AV色吊丝无码| 亚洲国产日产无码精品| 亚洲成人一级电影| 亚洲中文字幕久久精品无码2021| 亚洲国产电影在线观看| 亚洲精品视频免费在线观看| 亚洲网红精品大秀在线观看| 亚洲精品日韩专区silk| 亚洲jjzzjjzz在线观看| 亚洲三级视频在线观看| 亚洲永久在线观看| 亚洲中文精品久久久久久不卡| 亚洲一区二区三区国产精华液| 在线观看亚洲AV每日更新无码| 亚洲日韩国产一区二区三区在线 | 亚洲av无码不卡私人影院| 无码专区一va亚洲v专区在线| gogo全球高清大胆亚洲| 亚洲天堂免费在线视频| 激情97综合亚洲色婷婷五 | 亚洲宅男天堂a在线| 一本色道久久88亚洲精品综合| 亚洲色成人网站WWW永久四虎| 亚洲国产成人久久综合| www亚洲一级视频com| 国产av无码专区亚洲国产精品 | 亚洲午夜久久久精品电影院| 国产精品高清视亚洲精品| 亚洲熟妇久久精品| 亚洲av无码天堂一区二区三区 | 亚洲高清无在码在线无弹窗| 91亚洲精品自在在线观看| 亚洲一区AV无码少妇电影| 久久亚洲欧美国产精品|