可以合并增加Spark DataFrame的分区

时间:2019-09-27 06:57:56

标签: apache-spark

当我试图了解Coalesce()和Repartition()之间的区别时,我了解到Coalesce只能减少数据帧的分区数,如果我们尝试增加分区数,则没有分区保持不变。 根据{{​​3}}合并,仅用于减少分区数。

但是当我尝试执行以下代码时,我发现了两件事

  1. 对于具有合并分区数的数据框,可以增加
  2. 对于Rdd,如果shuffle = false,则无法随着合并而增加分区数。

这是否意味着通过合并数据帧分区可以增加?

    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

2 个答案:

答案 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