当我试图了解Coalesce()和Repartition()之间的区别时,我了解到Coalesce只能减少数据帧的分区数,如果我们尝试增加分区数,则没有分区保持不变。 根据{{3}}合并,仅用于减少分区数。
但是当我尝试执行以下代码时,我发现了两件事
这是否意味着通过合并数据帧分区可以增加?
val h1b1Df = spark.read.csv("/FileStore/tables/h1b_data.csv")
println("Original dataframe partitions = "+h1b1Df.rdd.getNumPartitions)
val cloasedDf = h1b1Df.coalesce(2)
println("Coalesced dataframe partitions = "+cloasedDf.rdd.getNumPartitions
val cloasedDf1 = cloasedDf.coalesce(6)
println("Coalesced dataframe with increased partitions = "+cloasedDf1.rdd.getNumPartitions)
//输出是
原始数据帧分区= 8
Coalesced数据框分区= 2
分区增加的Coalesced数据框= 6
val inpRdd = h1b1Df.rdd
println("Original rdd partitions = "+inpRdd.getNumPartitions)
val colasedRdd = inpRdd.coalesce(4)
println("Coalesced rdd partitions = "+colasedRdd.getNumPartitions)
val colasedRdd1 = colasedRdd.coalesce(6,false)
println("Coalesced rdd with increased partitions = "+colasedRdd1.getNumPartitions)
//输出
原始rdd分区= 8
Coalesced rdd分区= 4
分区增加的rdd = 4
答案 0 :(得分:0)
通过将shuffle = true设置为等于重新分区,Coalesce可用于增加分区。 当使用shuffle = false合并以增加数据时,将不会发生数据移动。因此,一个分区数据无法移动到另一分区。而reduce只是合并最近的分区。
谢谢
答案 1 :(得分:0)
Coalesce for Dataframe不能增加的分区大于集群中核心的总数。
val h1b1Df = spark.read.csv("/FileStore/tables/h1b_data.csv")
h1b1Df.rdd.getNumPartitions // prints 8
val cloasedDf = h1b1Df.coalesce(21)
cloasedDf.rdd.getNumPartitions // prints 8
val cloasedDf1 = cloasedDf.coalesce(2) // prints 2
cloasedDf1.rdd.getNumPartitions
val cloasedDf2 = cloasedDf.coalesce(7) // prints 7
cloasedDf2.rdd.getNumPartitions