scala> val p=sc.textFile("file:///c:/_home/so-posts.xml", 8) //i've 8 cores
p: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[56] at textFile at <console>:21
scala> p.partitions.size
res33: Int = 729
我预计会打印 8 个任务,但我在 Spark UI 中看到了 729 个任务
编辑:
按照@zero323的建议调用repartition()
后
scala> p1 = p.repartition(8)
scala> p1.partitions.size
res60: Int = 8
scala> p1.count
即使 Spark-shell 打印 8,我仍然在 Spark UI 中看到 729 个任务。
最佳答案
如果你看一下签名
textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String]
您会看到您使用的参数称为minPartitions
,这几乎描述了它的功能。在某些情况下,甚至会被忽略,但这是另一回事。幕后使用的输入格式仍然决定如何计算分割。
在这种特殊情况下,您可能可以使用mapred.min.split.size
来增加分割大小(这将在加载期间起作用)或在加载后简单地重新分区
(这数据加载后生效)但一般情况下应该没有必要。
关于scala - 为什么SparkContext.textFile的partition参数不生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467573/