【发布时间】:2018-12-25 12:13:34
【问题描述】:
我浏览过各种关于哈希分区的文章。但是我仍然不明白在什么情况下它比范围分区更有利。使用 sortByKey 后跟范围分区允许数据在集群中均匀分布。但在散列分区中可能并非如此。考虑以下示例:
考虑一个键为 [8, 96, 240, 400, 401, 800] 的 RDD 对,并且所需的分区数是 4。
在这种情况下,哈希分区在 分区:
partition 0: [8, 96, 240, 400, 800]
partition 1: [ 401 ]
partition 2: []
partition 3: []
(计算分区:p = key.hashCode() % numPartitions)
上述分区导致性能不佳,因为密钥未均匀分布在所有节点上。既然范围分区可以在集群中平均分配键,那么在什么情况下哈希分区被证明是最适合范围分区的呢?
【问题讨论】:
-
当你用来散列的键接近均匀分布时,散列分区是好的,即伪随机值会去你。
标签: performance apache-spark rdd partitioning