弹性分布式数据集(RDD)
1.为什么需要rdd分布式计算的需求分区控制Shuffle控制数据存储\序列化\发送数据计算API一个统一的数据抽象对象,来实现上述分布式计算所需的功能,这个抽象对象就是RDD2.rdd的概念1.RDD是一个抽象分布式数据集,是一个数据描述。RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。RDD在抽象上来说是一种元素集合,包
·
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]]
>>>
更多推荐
已为社区贡献2条内容
所有评论(0)