为什么 union() 是一个窄转换而 intersection() 是 spark 中的一个宽转换?

Why is union() a narrow transformation and intersection() is a wide transformation in spark?

我试图从 here 了解 Spark 中的基本概念。据我所知,窄转换会产生从单个父 RDD(可能是同一 RDD 的多个分区)转换而来的子 RDD。然而,union 和 intersection 都需要两个或多个 RDD 才能执行转换。有人可以从理论上解决这个问题吗?

不对,你的理解有误。窄转换是仅需要来自源的单个分区来计算输出的一个分区的所有元素的转换。 union 因此是一个窄转换,因为要创建输出分区,您只需要来自源数据的单个分区。

另一方面,交叉点很宽,因为即使对于输出的单个分区,它也需要访问(至少)一个源 rdds 的全部内容。

窄转换是依赖于父 RDD 中已知分区集(1 个或多个)的操作。它们可以在数据的一个子集上执行,而无需任何关于其他分区的信息。

相比之下,具有广泛依赖性的转换不能在任意行上执行,而是需要以特定方式对数据进行分区。具有广泛依赖性的转换包括任何需要重新分区的东西。