我已经阅读了有关散列分区的各种文章.但我仍然不知道在什么情况下它比范围分区更有利.使用sortByKey后跟范围分区允许数据在集群中均匀分布.但在散列分区中可能不是这种情况.请考虑以下示例:
考虑一对带有键[8,96,240,400,401,800]的RDD,所需的分区数为4.
在这种情况下,散列分区在分区之间按如下方式分配密钥:
partition 0: [8, 96, 240, 400, 800]
partition 1: [ 401 ]
partition 2: []
partition 3: []
Run Code Online (Sandbox Code Playgroud)
(计算分区:p = key.hashCode()%numPartitions)
由于密钥不是均匀分布在所有节点上,因此上述分区会导致性能下降.由于范围分区可以在集群中平均分配密钥,那么在什么情况下散列分区被证明最适合范围分区?