Apache spark 如何在使用哈希分区器时平衡负载?

Apache spark 如何在使用哈希分区器时平衡负载?,apache-spark,hash,partitioning,Apache Spark,Hash,Partitioning,在apachespark->中,通过使用散列分区er,我相信具有相同散列值的密钥将进入同一节点?如果大多数密钥都转到同一个分区er,那么在这种情况下如何平衡多个工作节点上的数据呢。请帮帮我,医生说 是。你是对的。所以,如果密钥的分布不一致,那么最终可能会出现集群的一部分处于空闲状态的情况 您的责任是确保密钥均匀分布在各个应用程序中。(这意味着哈希代码不应相同) 为此,您需要更好地了解HashPartitioner及其内部功能 注意:密钥的哈希代码将只是密钥本身。HashPartitioner将使

在apachespark->中,通过使用散列分区er,我相信具有相同散列值的密钥将进入同一节点?如果大多数密钥都转到同一个分区er,那么在这种情况下如何平衡多个工作节点上的数据呢。请帮帮我,医生说

。你是对的。所以,如果密钥的分布不一致,那么最终可能会出现集群的一部分处于空闲状态的情况

您的责任是确保密钥均匀分布在各个应用程序中。(这意味着哈希代码不应相同)

为此,您需要更好地了解
HashPartitioner
及其内部功能

注意:密钥的哈希代码将只是密钥本身。
HashPartitioner
将使用总分区数对其进行修改。i、 e hashcode Mod和totnumpartions

HashPartitioner

def nonNegativeMod(x: Int, mod: Int): Int = {
  val rawMod = x % mod
  rawMod + (if (rawMod < 0) mod else 0)
}
def nonNegativeMod(x:Int,mod:Int):Int={
val rawMod=x%mod
rawMod+(如果(rawMod<0)mod else 0)
}
  • 为了更好地理解,请看@user6910411提供的完美示例

您的意思是说我们需要编写自己的自定义分区器来在所有分区之间分割密钥?不需要编写自定义分区器。密钥的哈希代码应该是统一的。对于多个密钥,哈希代码不应相同。