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

在 Apache Spark 中,广播变量与累加器各自扮演什么角色?请解释二者的核心差异,并分别举例说明它们适用的典型业务场景。

数据技术原理方案权衡Apache Spark

考察说明

考察对 Spark 两种共享变量机制的理解深度及实际应用能力。

回答思路

  1. 【回答框架 1】广播变量是只读的共享变量,用于将大表或配置数据分发到所有 executor,每个 executor 只保留一份副本,通过高效的广播算法(如 TreeBroadcast)减少网络传输和内存占用。累加器是可写的共享变量,仅支持累加操作,主要用于实现计数器或求和,且只能在 driver 端读取最终值。
  2. 【回答框架 2】核心区别在于读写权限和用途:广播变量是只读的,所有 task 共享同一份数据,适合优化 join 或 map 操作中重复使用的静态数据;累加器是只写(从 executor 视角)的,只能执行加法等操作,用于统计任务处理量、错误次数等指标。
  3. 【回答框架 3】在场景应用上,广播变量典型用于小表 join 大表时,将小表广播到各节点,避免 shuffle 开销;累加器典型用于日志分析中统计处理的总记录数、满足特定条件的记录数或异常数量,例如统计过滤后的有效数据条数。
  4. 【回答框架 4】使用时需注意:广播变量修改后不会自动更新,需重新广播;累加器在 action 算子中才能保证精确累加,在 transformation 算子中可能因任务重试导致重复累加。
  5. 【关键点 1】广播变量只读,每个 executor 一份,用于优化数据分发;累加器只写,用于计数器。
  6. 【关键点 2】广播变量适合小表广播场景,可减少 shuffle 和网络 IO。
  7. 【关键点 3】累加器只在 action 算子中触发精确累加,transformation 中可能重复累加。
  8. 【易错点 1】不能在 executor 端读取累加器的值,只能在 driver 端获取最终结果。
  9. 【易错点 2】广播变量更新后需要重新广播,否则旧副本继续使用。
  10. 【易错点 3】累加器在 transformation 中执行时,任务重试或推测执行可能导致计数不准确。