我在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
我的问题是
coalesce(numPartitions)是否会从filterRDD中删除空分区?
coalesce(numPartitions)是否会进行改组?
答案 0 :(得分:6)
coalesce
转换用于减少分区数。如果输出分区的数量小于输入,则应使用coalesce
。它可以触发RDD混洗,具体取决于默认禁用的混洗标志(即假)。
如果分区数大于当前分区数并且您使用coalesce
方法而没有shuffle = true标志,则分区数保持不变。coalesce
不保证空分区将被删除。例如,如果您有20个空分区和10个包含数据的分区,则在调用rdd.coalesce(25)
后仍会有空分区。如果您将coalesce
与shuffle设置为true,那么这将等同于repartition
方法,并且数据将均匀分布在分区中。