1.为什么需要rdd

分布式计算的需求

  • 分区控制
  • Shuffle控制
  • 数据存储\序列化\发送
  • 数据计算API
  • 一个统一的数据抽象对象,来实现上述分布式计算所需的功能,这个抽象对象就是RDD

2.rdd的概念

  • 1.RDD是一个抽象分布式数据集,是一个数据描述。RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集)

  • 2.并没有真正获取到数据,对元数据信息的存储,提供操作rdd的算子,100多个,常用的有几十多个。

  • 3.有弹性的,从存储方面和数据容错方面体现RDD的弹性。

    • 存储方面:计算时,首选缓存,缓存不够时,可以存储到非缓存(也就是磁盘)。

    • 容错方面:计算过程中,task计算失败,可以恢复。默认是允许四次失败,可恢复。如果是stage失败也可也恢复,分区失败也可也恢复。shuffle之后,某一个分区失败,就得重新计算,因为是多对一的。
      分多个分区,是为了提高并行度,提高效率。

  • 4.依赖性,有依赖性才能有容错性,有依赖性才能划分宽依赖和窄依赖,可以形成task。

3.RDD的五大特性

在这里插入图片描述

  • RDD有分区的
  • 计算方法都会作用到每一个分片(分区)上
  • RDD 之间是有相互相互依赖的关系的
  • kv型RDD可以有分区器(默认为hash分区),(rdd.partitionBy)的方法来设置
  • RDD 分区数据的读取会尽量靠近数据所在地(移动数据)
  • RDD是分区存储的最小单位

代码演示

[root@node1 spark]# bin/pyspark 
Python 3.8.8 (default, Apr 13 2021, 19:58:26) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
22/01/17 20:37:48 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
22/01/17 20:37:50 WARN HiveConf: HiveConf of name hive.metastore.event.db.notification.api.auth does not exist
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.1.2
      /_/

Using Python version 3.8.8 (default, Apr 13 2021 19:58:26)
Spark context Web UI available at http://node1:4040
Spark context available as 'sc' (master = local[*], app id = local-1642423072766).
SparkSession available as 'spark'.
>>> rdd = sc.parallelize([1,2,3,4,5,6,7,8,9],3)
>>> rdd.glom().collect()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]                                               
>>> 
#分片操作
>>> sc.parallelize([1,2,3,4,5,6,7,8,9],3).glom().collect()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]       
# 给每个分片的数字分别乘10                                        
>>> sc.parallelize([1,2,3,4,5,6,7,8,9],3).map(lambda x: x * 10).glom().collect()
[[10, 20, 30], [40, 50, 60], [70, 80, 90]]
>>> 
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐