火花中的合并(numPartitions)是否经历了改组?

时间:2017-02-03 22:55:27

标签: apache-spark

我在spark变换函数中有一个简单的问题。

coalesce(numPartitions) - 将RDD中的分区数减少为numPartitions。过滤大型数据集后,可以更有效地运行操作。

val dataRDD = sc.textFile("/user/cloudera/inputfiles/records.txt")
val filterRDD = dataRDD.filter(record => record.split(0) == "USA")
val resizeRDD = filterRDD.coalesce(50)
val result    = resizeRDD.collect

我的问题是

  1. coalesce(numPartitions)是否会从filterRDD中删除空分区?

  2. coalesce(numPartitions)是否会进行改组?

1 个答案:

答案 0 :(得分:6)

coalesce转换用于减少分区数。如果输出分区的数量小于输入,则应使用coalesce。它可以触发RDD混洗,具体取决于默认禁用的混洗标志(即假)。

如果分区数大于当前分区数并且您使用coalesce方法而没有shuffle = true标志,则分区数保持不变。coalesce不保证空分区将被删除。例如,如果您有20个空分区和10个包含数据的分区,则在调用rdd.coalesce(25)后仍会有空分区。如果您将coalesce与shuffle设置为true,那么这将等同于repartition方法,并且数据将均匀分布在分区中。