本文共 763 字,大约阅读时间需要 2 分钟。
什么是RDD
弹性、分布式、数据集(数据存储在内存)
弹性的,RDD中的数据可以保存在内存中或磁盘里面
分布式存储,可以用于分布式计算
集合,可以存放很多元素
一个不可变,可分区,里面的元素可并行计算的集合
RDD的主要属性
- 数据集的基本组成但是一个组分片或一个分区列表,每个分片都会被一个计算任务处理,分区数量决定并发度。用户可以在创建RDD是指定RDD的分片个数,如果没有指定,那么久采用默认值(cpu 盒数)
- 一个函数会被作用在每一个分区。spark中RDD的计算一分区为单位,函数会被作用到每个分区上
- 一个RDD会被依赖于其他对多个RDD。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类型与流水线样的前后依赖关系。在部分分区数据丢失是,spark可以通过可以依赖重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。
- KV类型的RDD会有一个partitioner函数非kay-value的RDD的partitioner的值是None,partitioner函数决定了RDD本身的分区数量,也决定了Parent RDD shuffle 输出的分区数量
- 每个RDD 维护一个列表,每个partition 的位置存储在一个列表中。
RDD的方法/算子分类
RDD的算子分为两类:
- Tarnsformation 转换操作:返回一个新的RDD
- Action 动作操作:返回不是RDD(无返回值或其他的)
如何理解spark惰性计算?
- RDD中的所以转换都是惰性/延迟执行的,也就是或并不会直接计算。
- 遇到Action动作,这些转换才真的运行。
之所以使用惰性求值/延迟执行,是因为这样可以在Action是对RDD操作形成DAG有向无环图进行stage的划分和并行优化,这样设置让spark更加有效运行
转载地址:http://gakzi.baihongyu.com/