2016-08-01 79 views
2

所以,我试图测试基于这个stackoverflow帖子导致洗牌的Spark操作:LINK。但是,当操作不在Spark中引起混洗时,对于我来说没有意义,因为他们需要将分区移动到网络中以便将它们放在本地。火花笛卡尔不会导致洗牌?

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

回答

2

Shuffle是特定于键值对的RDD(RDD[(T, U)],通常描述为PairRDDsPairwiseRDDs)的操作,与Hadoop中的随机播放阶段或多或少相同。洗牌的目标是根据关键值将数据移动到特定执行器,并且Partitioner

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

+0

那么,如何知道哪些操作需要Spark中的网络流量呢?正如你所提到的,基于数据移动,“cartesian”实际上是一个昂贵的操作。因此,我们最好知道哪些其他行动有这种行为,以便我们避免。 – Tim

+1

如果操作仅由'mapPartitions'('map','filter'等)表示,则不需要数据移动。否则,它可能会以其他方式移动数据。 – zero323

+1

官方火花文档更多信息 http://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations – DanielVL