我正在運行一種迭代算法,在每次迭代中,每個值的列表都被分配一組鍵(1到N)。隨着時間的推移,文件在鍵上的分佈會變得不對稱。我注意到經過幾次迭代,合併階段,似乎RDD的最後幾個分區上的事情似乎開始非常緩慢。最後一個分區上的Spark轉換非常緩慢
我的變換如下:
dataRDD_of_20000_partitions.aggregateByKey(zeroOp)(seqOp, mergeOp)
.mapValues(...)
.coalesce(1000, true)
.collect()
這裏,在我以前分配的鍵aggregatebykey聚集體(1到N)。我可以合併分區,因爲我知道我需要的分區數量,並將coalesce shuffle設置爲true以平衡分區。
任何人都可以指出一些原因,這些轉換可能導致RDD的最後幾個分區處理緩慢?我想知道這是否與數據偏斜有關。