Apache Spark 第 3 章:核心概念 RDD / DataFrame

RDD 血统

RDD 血统 图--- 理解"懒执行"的关键:map、filter、reduceByKey 这些 Transformation 调用后 Spark 什么都没做,只是在内存里记下了一张"操作流程图"(血统图)。直到你调用 collect()、count()、save() 这类 Action,整条链才从头开始真正运行。好处是 Spark 能看到全貌再优化,坏处是调试时不容易发现哪步出错。

这张图揭示了 RDD 最核心的秘密:懒执行(Lazy Evaluation)。 前四步只是"记账",Spark 把每一步操作记录成一张血统图,直到 collect() 这个 Action 触发,整条链才真正开始计算。好处是 Spark 可以在执行前看到全貌,从而做整体优化。

窄依赖 vs 宽依赖:Stage 划分的本质

窄依赖 vs 宽依赖(图二) --- 这是 Stage 划分的本质。map/filter 是窄依赖,一个父分区只对应一个子分区,不需要跨节点传数据,可以流水线执行,非常快。groupByKey/join 是宽依赖,每个子分区需要从所有父分区里拉数据,必须走网络 Shuffle,代价极高,也正是这里切出了 Stage 边界。写代码时尽量少用宽依赖算子,能用 reduceByKey 就不用 groupByKey,前者会在 Map 端先做一次预聚合,大幅减少 Shuffle 数据量。

Dataset 三层抽象全景

三大抽象对比(图三) --- 对初学者最实用的结论是:直接用 DataFrame + Spark SQL,不要纠结 RDD。DataFrame 有 Schema、有 Catalyst 优化器、有 Tungsten 列式内存引擎,性能比手写 RDD 高很多,而且代码简洁十倍。RDD 只在处理非结构化数据(如图片字节流、自定义序列化对象)或需要精细控制执行行为时才有必要。Dataset 是 Scala/Java 专属,Python 用户完全不需要关心。

Partition:Spark 并行计算的基本单元

Partition 并行模型(图四) --- Partition 是 Spark 并行的最小单位,一个 Partition 对应一个 Task,一个 Task 跑在一个线程上。1.2GB 的文件默认被切成约 10 个 128MB 的分区,分发给各 Worker 上的 Executor 并行处理。分区数太少,机器核数用不满;分区数太多,Task 调度开销反而变大。实际经验是每个分区保持 128~256MB,分区总数约等于集群 CPU 总核数的 2 ~ 4 倍。

相关推荐
事变天下2 小时前
迈瑞的足球之夏:从一次救援到全球守护
大数据·科技
中微极客3 小时前
多智能体编排实战:CrewAI vs AutoGen(2026版)
大数据·网络·人工智能
用户3610588626124 小时前
Spark 核心之 Standalone-Cluster 模式:原理、流程与源码级深度拆解
spark
西邮彭于晏4 小时前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
IanSkunk5 小时前
企业AI办公落地技术拆解:从WorkBuddy任务引擎到JOTO实施路径
大数据·人工智能
ajassi20005 小时前
AI语音智能体开发日记(三)解决小程序配网中的蓝牙命名与MAC地址获取问题
ai·apache·ai编程
Xvisio诠视科技6 小时前
从“感知”到“理解”:空间计算如何成为具身智能世界模型的“数据底座”?
大数据·空间计算
jerryinwuhan6 小时前
数据预处理技术 2026-2027-1 开篇-课程介绍
大数据·python
Elastic 中国社区官方博客7 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
Elastic 中国社区官方博客7 小时前
Elasticsearch:搜索教程 - 全文搜索(一)
大数据·python·elasticsearch·搜索引擎·全文检索