CodeWalk

Spark RDD及其五大特性

作者:屠龙少年 · 2026-05-30 12:55

请解释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创建方式:

  1. 从外部存储(HDFS/HBase/本地文件)加载:sc.textFile()
  2. 从已有RDD转换:rdd.map().filter()
  3. 从内存集合并行化:sc.parallelize()