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

在 PySpark 中,一个 DataFrame 或 SQL 查询的执行计划是如何从逻辑阶段逐步转化到最终物理执行任务的?请说明使用 explain() 方法可以观察到哪些不同层级的计划信息,并解释这些计划分别对应 Spark 的哪个处理阶段。

数据性能优化技术原理PySparkSpark SQL

考察说明

考察对 PySpark 执行计划生成链路和 explain() 工具的理解。

回答思路

  1. 【回答框架 1】PySpark 执行计划生成分为四个阶段:未解析的逻辑计划、解析后的逻辑计划、优化后的逻辑计划、物理计划。DataFrame 操作先构造未解析逻辑计划,再由 Catalyst 解析器绑定列和表信息生成解析后的逻辑计划。
  2. 【回答框架 2】Catalyst 优化器应用谓词下推、列剪枝、常量折叠等规则得到优化后的逻辑计划;随后 SparkPlanner 将优化后的逻辑计划转换成物理计划,物理计划会进行成本估算并选择执行策略,最终生成 RDD 的执行任务。
  3. 【回答框架 3】explain() 默认展示优化后的逻辑计划和物理计划。explain(true) 或 explain('extended') 会展示包括未解析逻辑计划在内的完整计划链;explain('cost') 显示物理计划及估算成本;explain('codegen') 显示生成的 Java 代码;explain('formatted') 输出结构化格式。
  4. 【回答框架 4】在集群中查看执行计划可应用 explain() 在 DataFrame 上进行调用,日志或控制台输出计划树。计划中的 Project、Filter、Sort、Exchange 等节点对应具体执行步骤,Exchange 表示 Shuffle,BroadcastExchange 表示广播变量。
  5. 【回答框架 5】理解执行计划有助于定位数据倾斜、大表 Join 或无谓 Shuffle 等性能问题。
  6. 【关键点 1】执行计划链路:未解析逻辑计划 → 解析后的逻辑计划 → 优化后的逻辑计划 → 物理计划。
  7. 【关键点 2】explain() 默认输出优化后的逻辑计划和物理计划。
  8. 【关键点 3】explain(true) 显示完整计划链,展示每一阶段的详细信息。
  9. 【易错点 1】不要混淆 explain() 显示的计划与执行时实际的 DAG,物理计划只是执行蓝图,实际任务可能动态调整。
  10. 【易错点 2】解释计划中出现的 Exchange 并不总是预示着糟糕性能,有时是 Join 策略的一部分;需结合具体上下文分析。