大数据计算弹性分布式数据集
RDD 是什么?
不可变、可分区的数据集合,记的是“怎么算出来的”而不是数据本身
类比:菜谱,每一步都记着,锅糊了照着重做一遍就行
三个关键词
弹性、分布式、数据集,每个词都对应一个设计取舍。
- 不可变:每个转换都生成新 RDD,天然适合并行和重算
- 分区:数据按分区散在多个节点,一个分区一个 Task
- 血缘(lineage):记录从哪个父 RDD 经过什么算子得来,丢了可以重算
惰性求值
map / filter / join 这些 transformation 不会立刻执行,只是往血缘图里加一笔;直到遇到 count、collect、write 这类 action 才真正触发计算。好处是 Spark 能看到全貌再做优化(比如合并算子、调整 join 顺序)。
现在还用 RDD 吗
日常写 SQL 和 DataFrame 已经不需要直接操作 RDD 了,但 DataFrame 底层仍是 RDD + Catalyst 优化器。理解 RDD 主要是为了看懂血缘、分区、缓存(persist)这些概念——它们决定了作业跑得快不快。