为什么`getNumPartitions()`没有给我“repartition”指定的正确数量的分区?

时间:2015-12-16 00:10:48

标签: apache-spark pyspark partition hadoop-partitioning

我有一个textFile和RDD,如:sc.textFile(<file_name>)

我尝试重新分区RDD以加快处理速度:

sc.repartition(<n>)

无论我为<n>投入什么,它似乎都没有改变,如下所示:

无论如何,

RDD.getNumPartitions()始终打印相同的数字(3)

如何更改分区数以提高性能?

1 个答案:

答案 0 :(得分:7)

那是因为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