数据岗位面试题更新 2026-08-05

请解释PySpark中DAG的工作原理,并说明DAG在任务调度中扮演什么角色?

数据问题拆解技术原理PySpark

考察说明

考察对PySpark执行计划与调度机制的理解。

回答思路

  1. 【回答框架 1】DAG是有向无环图,在PySpark中表示RDD或DataFrame的血缘关系及计算步骤。每个action操作会触发生成一个DAG,图中的节点代表RDD分区或窄/宽依赖的Stage,边代表数据转换依赖。
  2. 【回答框架 2】创建DAG后,DAGScheduler会将其拆分为多个Stage,划分依据是宽依赖(如shuffle操作)。窄依赖的转换在同一个Stage内流水线执行。
  3. 【回答框架 3】Stage内部由TaskScheduler调度为多个Task,每个Task处理一个分区。调度时考虑数据本地性,尽量将任务分配到持有数据的节点上。
  4. 【回答框架 4】DAG在调度中的作用:提供执行计划,记录依赖关系,支持故障恢复(根据血缘重新计算丢失的分区),并优化执行(如合并窄依赖操作)。
  5. 【关键点 1】DAG记录RDD血统,实现惰性计算和容错。
  6. 【关键点 2】宽依赖(shuffle)是Stage划分的边界。
  7. 【关键点 3】DAGScheduler将DAG转换为Stage,TaskScheduler管理Task执行。
  8. 【易错点 1】不能将窄依赖的RDD转换都视为一个Stage,若无宽依赖则可合并。
  9. 【易错点 2】DAG调度不保证数据完全一致,需根据血缘重算时可能重复执行。