Может объединить увеличение разделов Spark DataFrame - PullRequest
1 голос
/ 27 сентября 2019

Когда я пытаюсь понять разницу между coalesce () и repartition (), я понял, что coalesce может только уменьшить количество разделов в dataframe, и если мы попытаемся увеличить количество разделов, то ни один из разделов не останется неизменным.В соответствии с https://stackoverflow.com/a/45854701/1784552 coalesce используется только для уменьшения количества разделов.

Но когда я попытался выполнить приведенный ниже код, я заметил две вещи

  1. Для Dataframe сcoalesce количество разделов может быть увеличено
  2. Для Rdd, если shuffle = false, тогда количество разделов не может быть увеличено с coalesce.

Означает ли это, что с coalesce dataframe разделы могут быть увеличены?

    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) 

// out out is

Исходные разделы информационного кадра = 8

Объединенные разделы информационного кадра = 2

Объединенный информационный кадр с увеличенными разделами = 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

Объединенные разделы rdd = 4

Объединенные rdd с увеличенными разделами = 4

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Объединение данных для фрейма данных не может увеличить количество разделов, превышающих общее количество ядер в кластере.

 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
0 голосов
/ 27 сентября 2019

Coalesce можно использовать для увеличения разделов, установив shuffle = true, что равно перераспределению.Когда вы используете coalesce с shuffle = false для увеличения, перемещение данных не произойдет.Таким образом, данные одного раздела не могут быть перемещены в другой раздел.Принимая во внимание, что при уменьшении он просто сливает ближайшие разделы.

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...