Почему `getNumPartitions()` не дает мне правильное количество разделов, указанное в `repartition`?
У меня есть textFile
в и рдд вроде так: sc.textFile(<file_name>)
,
Я пытаюсь перераспределить RDD для ускорения обработки:
sc.repartition(<n>)
,
Неважно, что я положил в <n>
, кажется, не меняется, как указано:
RDD.getNumPartitions()
всегда печатает один и тот же номер (3)
не важно что.
Как изменить количество разделов для увеличения производительности?
1 ответ
Решение
Это потому, что СДР неизменны. Вы не можете изменить разделы СДР, но вы можете создать новый с нужным количеством разделов.
scala> val a = sc.parallelize( 1 to 1000)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:21
scala> a.partitions.size
res2: Int = 4
scala> val b = a.repartition(6)
b: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[4] at repartition at <console>:23
scala> a.partitions.size
res3: Int = 4
scala> b.partitions.size
res4: Int = 6