0


【Spark】(task6)Spark RDD完成统计逻辑

文章目录

一、Spark RDD

RDD:resilient distributed dataset (RDD)

每个spark程序都有一个driver program运行main函数,在cluster集群上执行各种并行操作。我们也可以将RDD持久化到内存,便于在并行操作中重用。RDD 是 Spark 最基本的数据抽象,它是只读的、分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD 转换而来,它具有以下特性:

  • 一个 RDD 由一个或者多个分区(Partitions)组成。对于 RDD 来说,每个分区会被一个计算任务所处理,用户可以在创建 RDD 时指定其分区个数,如果没有指定,则默认采用程序所分配到的 CPU 的核心数;
  • RDD 拥有一个用于计算分区的函数 compute;
  • RDD 会保存彼此间的依赖关系,RDD 的每次转换都会生成一个新的依赖关系,这种 RDD 之间的依赖关系就像流水线一样。在部分分区数据丢失后,可以通过这种依赖关系重新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算;
  • Key-Value 型的 RDD 还拥有 Partitioner(分区器),用于决定数据被存储在哪个分区中,目前 Spark 中支持 HashPartitioner(按照哈希分区) 和 RangeParationer(按照范围进行分区);
  • 一个优先位置列表 (可选),用于存储每个分区的优先位置 (prefered location)。对于一个 HDFS 文件来说,这个列表保存的就是每个分区所在的块的位置,按照“移动数据不如移动计算”的理念,Spark 在进行任务调度的时候,会尽可能的将计算任务分配到其所要处理数据块的存储位置。

二、使用RDD functions完成任务2的统计逻辑

  1. from pyspark.sql import SparkSession
  2. from pyspark import SparkFiles
  3. import pandas as pd
  4. spark = SparkSession.builder.appName('pyspark').getOrCreate()
  5. spark.sparkContext.addFile('https://cdn.coggle.club/Pokemon.csv')
  6. df = spark.read.csv("file://"+SparkFiles.get("Pokemon.csv"), header=True, inferSchema=True)
  7. df = df.withColumnRenamed('Sp. Atk','SpAtk')
  8. df = df.withColumnRenamed('Sp. Def','SpDef')
  9. df = df.withColumnRenamed('Type 1','Type1')
  10. df = df.withColumnRenamed('Type 2','Type2')
  11. df.show()+--------------------+-----+------+-----+---+------+-------+-----+-----+-----+----------+---------+| Name|Type1| Type2|Total| HP|Attack|Defense|SpAtk|SpDef|Speed|Generation|Legendary|+--------------------+-----+------+-----+---+------+-------+-----+-----+-----+----------+---------+| Bulbasaur|Grass|Poison|318|45|49|49|65|65|45|1| false|| Ivysaur|Grass|Poison|405|60|62|63|80|80|60|1| false|| Venusaur|Grass|Poison|525|80|82|83|100|100|80|1| false||VenusaurMega Venu...|Grass|Poison|625|80|100|123|122|120|80|1| false|| Charmander| Fire| null|309|39|52|43|60|50|65|1| false|| Charmeleon| Fire| null|405|58|64|58|80|65|80|1| false|| Charizard| Fire|Flying|534|78|84|78|109|85|100|1| false||CharizardMega Cha...| Fire|Dragon|634|78|130|111|130|85|100|1| false||CharizardMega Cha...| Fire|Flying|634|78|104|78|159|115|100|1| false|| Squirtle|Water| null|314|44|48|65|50|64|43|1| false|| Wartortle|Water| null|405|59|63|80|65|80|58|1| false|| Blastoise|Water| null|530|79|83|100|85|105|78|1| false||BlastoiseMega Bla...|Water| null|630|79|103|120|135|115|78|1| false|| Caterpie| Bug| null|195|45|30|35|20|20|45|1| false|| Metapod| Bug| null|205|50|20|55|25|25|30|1| false|| Butterfree| Bug|Flying|395|60|45|50|90|80|70|1| false|| Weedle| Bug|Poison|195|40|35|30|20|20|50|1| false|| Kakuna| Bug|Poison|205|45|25|50|25|25|35|1| false|| Beedrill| Bug|Poison|395|65|90|40|45|80|75|1| false||BeedrillMega Beed...| Bug|Poison|495|65|150|40|15|80|145|1| false|+--------------------+-----+------+-----+---+------+-------+-----+-----+-----+----------+---------+
  12. only showing top 20 rows
  1. rdd = df.rdd
  2. cols = df.columns
  3. for i inrange(len(cols)):print('-'*10,cols[i],'-'*10)print('不同的取值个数:',len(dict(rdd.map(lambda x: x[i]).countByValue())))print('空值个数:',rdd.filter(lambda x: x[i]==None).count())"""
  4. ---------- Name ----------
  5. 不同的取值个数: 799
  6. 空值个数: 0
  7. ---------- Type1 ----------
  8. 不同的取值个数: 18
  9. 空值个数: 0
  10. ---------- Type2 ----------
  11. 不同的取值个数: 19
  12. 空值个数: 386
  13. ---------- Total ----------
  14. 不同的取值个数: 200
  15. 空值个数: 0
  16. ---------- HP ----------
  17. 不同的取值个数: 94
  18. 空值个数: 0
  19. ---------- Attack ----------
  20. 不同的取值个数: 111
  21. 空值个数: 0
  22. ---------- Defense ----------
  23. 不同的取值个数: 103
  24. 空值个数: 0
  25. ---------- SpAtk ----------
  26. 不同的取值个数: 105
  27. 空值个数: 0
  28. ---------- SpDef ----------
  29. 不同的取值个数: 92
  30. 空值个数: 0
  31. ---------- Speed ----------
  32. 不同的取值个数: 108
  33. 空值个数: 0
  34. ---------- Generation ----------
  35. 不同的取值个数: 6
  36. 空值个数: 0
  37. ---------- Legendary ----------
  38. 不同的取值个数: 2
  39. 空值个数: 0
  40. """

Reference

[1] 官方文档RDD Programming Guide
[2] https://blog.csdn.net/qq_56870570/article/details/118177403?spm=1001.2014.3001.5506
[3] Spark入门阶段一之扫盲笔记
[4] (重点)SPARK官方教程系列快速入门
[5] Spark RDD 简介


本文转载自: https://blog.csdn.net/qq_35812205/article/details/124334477
版权归原作者 山顶夕景 所有, 如有侵权,请联系我们删除。

“【Spark】(task6)Spark RDD完成统计逻辑”的评论:

还没有评论