2017-07-30 86 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?