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

请解释 Apache Spark 中分区的概念,并说明有哪些方法可以调整 RDD 的分区数量?

数据性能优化技术原理Apache Spark

考察说明

考查对 Spark 分区概念的理解以及调整分区数量的常用操作。

回答思路

  1. 【回答框架 1】分区是 RDD 逻辑上被划分成的多个数据块,每个分区对应集群中的一个任务执行单元,分区数决定了任务的并行度。
  2. 【回答框架 2】调整 RDD 分区数主要有两种方式:一是通过 repartition 方法,它会进行 shuffle 操作,可增加或减少分区数,但代价较高;二是通过 coalesce 方法,它默认不进行 shuffle,只能减少分区数,能有效减少网络传输。
  3. 【回答框架 3】对于增加分区数,应使用 repartition;对于减少分区数,优先考虑 coalesce 以减少 shuffle 开销。此外,创建 RDD 时可以通过指定分区数参数(如 parallelize 的 numSlices)来初始设置分区数。
  4. 【回答框架 4】在应用场景上,应根据数据量和集群资源合理设置分区数,避免分区过小导致任务过多、调度开销大,或分区过大导致数据倾斜和资源浪费,通常建议分区数为集群核心数的 2-3 倍。
  5. 【关键点 1】分区是 RDD 数据划分的最小逻辑单元,决定任务并行度。
  6. 【关键点 2】repartition 可增加或减少分区数,但会触发 shuffle。
  7. 【关键点 3】coalesce 通常用于减少分区数,且默认不触发 shuffle,性能更优。
  8. 【关键点 4】分区数量应结合数据规模与集群资源合理设置,避免过小或过大。
  9. 【易错点 1】误以为 coalesce 可以随意增加分区数,实际上 coalesce 默认只能减少分区,若需增加应使用 repartition。
  10. 【易错点 2】忽视 shuffle 的开销,在需要减少分区时仍使用 repartition,导致不必要的数据重分布。
  11. 【易错点 3】未考虑数据倾斜,仅调整分区数可能无法解决热点问题,还需结合 key 散列或加盐等策略。