Spark重新分区不均匀分布记录
Posted
技术标签:
【中文标题】Spark重新分区不均匀分布记录【英文标题】:Spark repartition does not distribute records evenly 【发布时间】:2017-07-30 14:25:21 【问题描述】:我有一个 rdd,我按一个字段重新分区
rdd = rdd.repartition( new Column("block_id"));
并将其保存到 hdfs。
我预计如果有 20 个不同的 block_id
,重新分区将产生 20 个新分区,每个分区都包含不同的 block_id
。
但实际上重新分区后有 19 个分区,每个分区正好有一个block_id
,一个分区有两个block_id
。
这意味着内核将具有两个block_id
的分区写入磁盘所需的时间是其他内核的两倍,因此总时间加倍。
【问题讨论】:
我很困惑,RDD
上的方法repartition
只需要Int
,而不是Column
【参考方案1】:
Spark Dataset
使用哈希分区。不能保证不会有hash colisions 所以你不能指望:
如果有 20 个不同的 block_id,重新分区将产生 20 个新分区,每个分区都有不同的 block_id
您可以尝试增加分区的数量,但使用提供良好保证的数量是相当不切实际的。
使用 RDD,您可以设计自己的分区器How to Define Custom partitioner for Spark RDDs of equally sized partition where each partition has equal number of elements?
【讨论】:
以上是关于Spark重新分区不均匀分布记录的主要内容,如果未能解决你的问题,请参考以下文章