Почему результаты RDD.getNumPartitions и RDD.mapPartitions различаются? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь понять, почему у меня нет одного и того же результата при подсчете количества между этими двумя методами:

val rdd: RDD[Int] = sparkSession.sparkContext.parallelize(0 to 9)
println("S1---> " +rdd.getNumPartitions )
val partitionSizes: Array[Int] = rdd.mapPartitions(iter => Iterator(iter.length)).collect()
partitionSizes.foreach((row: Int) => {
  println("S2---> " +row )
})

Вот мой результат:

S1--> 1

S2 ---> 10

Почему?

1 Ответ

2 голосов
/ 21 октября 2019

Итак, здесь происходит несколько вещей.

Ваш default.parallelism установлен в 1. Не уверен, как, но работает несколько ресурсов. Вы можете видеть, что S1 ---> 1 содержит 1 раздел, а S2 ---> 10 - 10 элементов в 1 разделе. Кажется, для суммирования.

Используя блокнот данных, обратите внимание на pls:

val rdd: RDD[Int] = spark.sparkContext.parallelize(0 to 9)
println("S1---> " +rdd.getNumPartitions )
//S1---> 8
sc.defaultParallelism
//res9: Int = 8, confirms S1 answer

val partitionSizes: Array[Int] = rdd.mapPartitions(iter => Iterator(iter.length)).collect()
//partitionSizes: Array[Int] = Array(1, 1, 1, 2, 1, 1, 1, 2); the 8 partitions and their count

// Print of the above simply, per row
partitionSizes.foreach((row: Int) => {
   println("S2---> " +row )
})

// Count of items per partition
S2---> 1
S2---> 1
S2---> 1
S2---> 2
S2---> 1
S2---> 1
S2---> 1
S2---> 2

Итак, здесь происходит две вещи -> количество разделов ирассчитывать на раздел. Название не совсем правильное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...