Я использую HashPartioner
, но получаю неожиданный результат. Я использую 3 разных строки в качестве ключей и даю параметр раздела как 3, поэтому я ожидаю 3 раздела.Spark HashPartitioner Неожиданное разбиение на разделы
val cars = Array("Honda", "Toyota", "Kia")
val carnamePrice = sc.parallelize(for {
x <- cars
y <- Array(100,200,300)
} yield (x, y), 8)
val rddEachCar = carnamePrice.partitionBy(new HashPartitioner(3))
val mapped = rddEachCar.mapPartitionsWithIndex{
(index, iterator) => {
println("Called in Partition -> " + index)
val myList = iterator.toList
myList.map(x => x + " -> " + index).iterator
}
}
mapped.take(10)
Результат приведен ниже. Он дает только 2 раздела. Я проверил хэш-коды для строки (69909220 75427 -1783892706). Что может быть проблемой здесь? Возможно, я неправильно понял алгоритм разбиения.
Array[String] = Array((Toyota,100) -> 0, (Toyota,200) -> 0, (Toyota,300) -> 0, (Honda,100) -> 1, (Honda,200) -> 1, (Honda,300) -> 1, (Kia,100) -> 1, (Kia,200) -> 1, (Kia,300) -> 1)