2016-08-01 78 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