在apache spark中 - >通过使用哈希分区,我相信具有相同哈希值的密钥将继续到同一个节点?如果大多数密钥进入相同的分区,以及如何在这种情况下平衡多个工作节点上的数据,该怎么办?请帮帮我
答案 0 :(得分:1)
Doc说.. A Partitioner that implements hash-based partitioning using Java's Object.hashCode
是即可。你是对的。因此,如果密钥的分配不均匀,则可能会在群集的一部分处于空闲状态时结束。 See
您有责任确保密钥均匀分布。(这意味着哈希码不应相同)
为此,您需要更好地了解HashPartitioner
及其在内部的作用。
注意:密钥的哈希码只是密钥本身。 HashPartitioner
将使用总分区数修改它。即hashcode Mod with totnumpartions。
以下Util类方法由HashPartitioner
def nonNegativeMod(x: Int, mod: Int): Int = {
val rawMod = x % mod
rawMod + (if (rawMod < 0) mod else 0)
}