Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark HashPartitioner意外分区_Apache Spark_Rdd - Fatal编程技术网

Apache spark Spark HashPartitioner意外分区

Apache spark Spark HashPartitioner意外分区,apache-spark,rdd,Apache Spark,Rdd,我正在使用HashPartioner,但得到了一个意外的结果。 我使用3个不同的字符串作为键,并将分区参数设为3,所以我希望有3个分区 val cars=Array(“本田”、“丰田”、“起亚”) val carnamePrice=sc.parallelize(用于{ x+“->”+索引)。迭代器 } } 地图。采取(10) 结果如下。它只提供2个分区。我检查了字符串的哈希代码 (69909220 75427 -1783892706). 这里有什么问题?可能我误解了分区算法 Array[Str

我正在使用
HashPartioner
,但得到了一个意外的结果。 我使用3个不同的字符串作为键,并将分区参数设为3,所以我希望有3个分区

val cars=Array(“本田”、“丰田”、“起亚”)
val carnamePrice=sc.parallelize(用于{
x+“->”+索引)。迭代器
}
}
地图。采取(10)
结果如下。它只提供2个分区。我检查了字符串的哈希代码 (69909220 75427 -1783892706). 这里有什么问题?可能我误解了分区算法

Array[String]=数组((丰田,100)->0,(丰田,200)->0,(丰田,300)->0,(本田,100)->1,(本田,200)->1,(本田,300)->1,(起亚,100)->1,(起亚,200)->1,(起亚,300)->1)

这里没有什么奇怪的事情,由
HashPartitioner使用的
实现如下:

def nonNegativeMod(x:Int,mod:Int):Int={
val rawMod=x%mod
rawMod+(如果(rawMod<0)mod else 0)
}
通过3个分区,密钥分发定义如下所示:

用于{car nonNegativeMod(car.hashCode,3))
Seq[(字符串,Int)]=列表((本田,1)、(丰田,0)、(起亚,1))
换句话说,没有直接哈希冲突并不保证没有任意数模的冲突