Jawaban Justin luar biasa dan tanggapan ini masuk lebih dalam.
The repartition
algoritma tidak shuffle penuh dan menciptakan partisi baru dengan data yang merata. Mari kita membuat DataFrame dengan angka dari 1 hingga 12.
val x = (1 to 12).toList
val numbersDf = x.toDF("number")
numbersDf
berisi 4 partisi di mesin saya.
numbersDf.rdd.partitions.size // => 4
Berikut adalah cara membagi data pada partisi:
Partition 00000: 1, 2, 3
Partition 00001: 4, 5, 6
Partition 00002: 7, 8, 9
Partition 00003: 10, 11, 12
Mari kita lakukan shuffle penuh dengan repartition
metode ini dan dapatkan data ini pada dua node.
val numbersDfR = numbersDf.repartition(2)
Berikut adalah bagaimana numbersDfR
data dipartisi di mesin saya:
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
The repartition
Metode membuat partisi baru dan merata mendistribusikan data dalam partisi baru (distribusi data lebih bahkan untuk set data yang lebih besar).
Perbedaan antara coalesce
danrepartition
coalesce
menggunakan partisi yang ada untuk meminimalkan jumlah data yang dikocok. repartition
membuat partisi baru dan melakukan pengocokan penuh. coalesce
menghasilkan partisi dengan jumlah data yang berbeda (kadang-kadang partisi yang memiliki ukuran yang jauh berbeda) dan repartition
menghasilkan partisi berukuran kurang lebih sama.
Apakah coalesce
atau repartition
lebih cepat?
coalesce
mungkin berjalan lebih cepat daripada repartition
, tetapi partisi berukuran tidak sama umumnya lebih lambat untuk bekerja dengan dari partisi berukuran sama. Anda biasanya perlu mempartisi ulang dataset setelah memfilter kumpulan data besar. Saya menemukan repartition
keseluruhan lebih cepat karena Spark dibuat untuk bekerja dengan partisi berukuran sama.
NB Saya dengan anehnya mengamati bahwa partisi ulang dapat meningkatkan ukuran data pada disk . Pastikan untuk menjalankan tes saat Anda menggunakan partisi ulang / penggabungan pada kumpulan data besar.
Baca posting blog ini jika Anda ingin lebih detail.
Ketika Anda akan menggunakan gabungan & partisi dalam praktek
minimize data movement
daripadaavoiding data movement
.