为什么 `getNumPartitions()` 没有给我由 `repartition` 指定的正确分区数?
Why is `getNumPartitions()` not giving me the correct number of partitions specified by `repartition`?
我有一个 textFile
和 RDD 像这样:sc.textFile(<file_name>)
.
我尝试重新分区RDD以加快处理速度:
sc.repartition(<n>)
。
无论我为 <n>
输入什么,它似乎都没有改变,如所示:
RDD.getNumPartitions()
总是打印相同的数字 (3)
无论如何。
如何更改分区数以提高性能?
那是因为 RDD 不可变。
您无法更改 RDD 的分区,但您可以创建一个具有所需分区数的新分区。
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
我有一个 textFile
和 RDD 像这样:sc.textFile(<file_name>)
.
我尝试重新分区RDD以加快处理速度:
sc.repartition(<n>)
。
无论我为 <n>
输入什么,它似乎都没有改变,如所示:
RDD.getNumPartitions()
总是打印相同的数字 (3)
无论如何。
如何更改分区数以提高性能?
那是因为 RDD 不可变。 您无法更改 RDD 的分区,但您可以创建一个具有所需分区数的新分区。
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