2017-07-30 82 views
1

我有我的一個領域星火重新分區不分發記錄均勻

rdd = rdd.repartition(new Column("block_id")); 

重新分區,並將其保存到HDFS的RDD。

我認爲如果有20個不同的block_id's,重新分區會產生20個新的分區,每個分區有不同的block_id。 但實際上在重新分區後有19個分區,每個分區只有一個block_id和一個分區擁有兩個block_id's。 這意味着,使用兩個block_id的磁盤寫入分區的核心與其他內核相比需要兩倍的時間,因此總體時間加倍。

+0

我很困惑,對'的'方法repartition' RDD'只需要一個'Int',而不是一個'Column' –

回答

1

Spark Dataset使用散列分區。有沒有保證不會有hash colisions所以你不能指望:

,如果有20分不同的BLOCK_ID的,重新分區將產生各持不同的BLOCK_ID

你可以嘗試20周新的分區增加分區數量,但使用提供良好保證的數字是相當不切實際的。

隨着RDDS你可以設計自己的分區How to Define Custom partitioner for Spark RDDs of equally sized partition where each partition has equal number of elements?