2
所以,我試圖測試基於這個stackoverflow帖子導致洗牌的Spark操作:LINK。但是,當操作不在Spark中引起混洗時,對於我來說沒有意義,因爲他們需要將分區移動到網絡中以便將它們放在本地。火花笛卡爾不會導致洗牌?
Spark如何在幕後實際執行其cartesian
和distinct
操作?
所以,我試圖測試基於這個stackoverflow帖子導致洗牌的Spark操作:LINK。但是,當操作不在Spark中引起混洗時,對於我來說沒有意義,因爲他們需要將分區移動到網絡中以便將它們放在本地。火花笛卡爾不會導致洗牌?
Spark如何在幕後實際執行其cartesian
和distinct
操作?
Shuffle是特定於鍵值對的RDD(RDD[(T, U)]
,通常描述爲PairRDDs
或PairwiseRDDs
)的操作,與Hadoop中的隨機播放階段或多或少相同。洗牌的目標是根據關鍵值將數據移動到特定執行器,並且Partitioner
。
Spark中有不同類型的操作,它們需要網絡流量,但不使用與shuffle相同的邏輯類型,也不總是需要鍵值對。笛卡爾積是其中的一個操作。它在機器之間移動數據(實際上它會導致更昂貴的數據移動),但不建立密鑰和執行器之間的關係。
那麼,如何知道哪些操作需要Spark中的網絡流量呢?正如你所提到的,基於數據移動,「cartesian」實際上是一個昂貴的操作。因此,我們最好知道哪些其他行動有這種行爲,以便我們避免。 – Tim
如果操作僅由'mapPartitions'('map','filter'等)表示,則不需要數據移動。否則,它可能會以其他方式移動數據。 – zero323
官方火花文檔更多信息 http://spark.apache.org/docs/latest/programming-guide.html#shuffle-operations – DanielVL