Spark RDD及其五大特性
请解释Spark中RDD(Resilient Distributed Dataset)的概念,以及RDD的五大特性。
回答
屠龙少年
RDD定义: 弹性分布式数据集,Spark最核心的数据抽象。它是一个不可变、可分区的集合,支持并行操作,能够自动容错。
RDD五大特性:
1. 分区列表(Partitions):
- RDD由多个分区(Partition)组成,每个分区对应一个Task
- 分区数决定了并行度
- 可通过
rdd.getNumPartitions()查看
2. 分区函数(Partitioner):
- 仅对Key-Value类型RDD有效
- 默认HashPartitioner,可自定义(RangePartitioner等)
- 决定了数据如何分配到不同分区
3. 依赖列表(Dependencies):
- 记录RDD的**血统(Lineage)**信息
- 分为窄依赖(OneToOne/ Narrow)和宽依赖(Shuffle / Wide)
- 用于计算Stage划分和故障恢复
4. 计算函数(Compute):
- 给定一个Partition,如何从父RDD计算出该分区的数据
- 每个RDD的compute方法定义了如何获取数据
5. 数据本地性偏好(Preferred Locations):
- 对于HDFS文件RDD,优先在数据所在的节点计算
- 减少网络传输,提升计算效率
RDD创建方式:
- 从外部存储(HDFS/HBase/本地文件)加载:
sc.textFile() - 从已有RDD转换:
rdd.map().filter() - 从内存集合并行化:
sc.parallelize()