什么是RDD
- RDD是弹性分布式数据集,Spark最基本的数据集,它不可变、可分区、可并行计算。
- 弹性表示:可以将数据存储在内存或者磁盘,RDD的分区是可以改变的,task如果失败会进行特定次数的重试,stage如果失败会自动进行特定次数的重试且只会计算失败的分片,基于lineage的高效容错
RDD有什么特性
- A list of partitions
- A function for computing each split
- A list of dependencies on other RDDs
- Optionally,a Partitioner for key-value RDDs(eg:to say that the RDD is hash-partitioned)
- 可选项,数据本地性,数据位置最优
map、flatMap与mapPartition的区别
- map 函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象
- flatMap函数则是两个操作的集合——正是“先映射后扁平化”
-
- 对每一条输入进行指定的操作,然后为每一条输入返回一个对象
-
- 将所有对象合并为一个对象
- mapPartition每次处理一个分区的数据,但是可能导致OOM
repartition和coalesce异同
- 前者会产生shuffle,后者不会
- r