RDD特性及其实现特性的方法
1.数据来之后需要知道数据应该放在哪个分区,标记数据是哪个分区的 。
getpartitions()
2.之后需要对数据进行操作,(执行一些计算逻辑)。
compute()
3.在操作数据的时候需要对数据进行变换此时就需要shuffle 可能把多个分区变少的分区也有可能由少分区到多的
Prtitioner (相当于管理者)来管控这个事控制分区的数据流向。
4.而我们RDD是具有弹性的,新的RDD 损坏或出错了 可以由前一个RDD重新计算得到 故而需要记录它是谁的子类是从哪里来 记录RDD 之间的依赖关系。
getdependencies()
5.记录每个partition的优先位置(移动数据不如移动计算)
preferredLocation()
RDD 是弹性分布式数据集,是Spark中最基本的数据抽象(代码中是一个抽象类)
关于弹性的理解
1.存储的弹性:内存与磁盘的自动切换;shuffle过程是需要落盘的(自动切换)
2.容错的弹性:数据丢失可以自动恢复 基于其rdd的继承关系(记录了当前算子是由哪个算子计算得出)故而丢失的数据可以由上一个算子重新计算得到结果
3.计算的弹性: 计算出错可以重新计算也是基于rdd的继承关系()
4.分片的弹性:可以根据需要进行分片
所有RDD算子相关的操作都在excutor端执行,RDD算子之外的操作都在Driver端执行
RDD数创建的方式及其创建结果
RDD数据从集合中创建
分区数如下:
本地 默认值 总核数
集群 默认值 总核数 与 2的最大值
rdd数据从集合中创建
自设置分区
如何分的区 :大概把数据根据设置的分区数 尽可能均等的分在每个分区内(后往前)
rdd数据从文件中读取后创建
默认值 :默认取值为当前核数和2的最小值
RDD数据从文件中读取后创建
设置了分区
要计算步长跟据步长取相应结果