在分布式计算框架(如 Apache Spark)中,理解宽依赖和窄依赖对于优化和调试作业非常重要。宽依赖意味着一个子 RDD 的分区依赖于父 RDD 的多个分区,这通常会导致需要进行全局的 shuffle 操作。窄依赖则意味着一个子 RDD 的分区仅依赖于父 RDD 的一个或几个特定分区。
让我们分析每个选项:
A: `map` 操作是窄依赖,因为每个输出分区只依赖于一个输入分区。没有数据的重新分配。
B: `flatMap` 操作也是窄依赖,因为它类似于 `map`,每个输出分区只依赖于一个输入分区。
C: `reduceByKey` 是宽依赖。这个操作将需要对数据进行按键分组和聚合,因此需要对数据进行 shuffle,以确保同一个键的所有值都被发送到同一个分区。
D: `sample` 操作通常是窄依赖,因为它可以在每个分区上独立进行采样,而不需要重新分配数据。
因此,选项 C: `reduceByKey` 是肯定的宽依赖操作。