火花笛卡尔不会引起洗牌?

Spark cartesian doesn't cause shuffle?

因此,我尝试基于此 Whosebug post:LINK 测试导致混洗的 Spark 操作。但是,当 cartesian 操作不会导致 Spark 中的混洗时,这对我来说没有意义,因为他们需要在网络上移动分区以便在本地将它们放在一起。

Spark 实际上是如何在幕后执行其 cartesiandistinct 操作的?

Shuffle 是键值对(RDD[(T, U)] 通常被描述为 PairRDDsPairwiseRDDs)的 RDDs 特有的操作,或多或少等同于 shuffle 阶段哈多普。 shuffle 的一个目标是根据键值和 Partitioner.

将数据移动到特定的执行器

Spark 中有不同类型的操作,需要网络流量,但不要使用与 shuffle 相同类型的逻辑,并不总是需要键值对。笛卡尔积是这些操作之一。它在机器之间移动数据(实际上它会导致更昂贵的数据移动)但不会在密钥和执行程序之间建立关系。