Jawaban Justin luar biasa dan tanggapan ini masuk lebih dalam.
The repartitionalgoritma 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 repartitionmetode ini dan dapatkan data ini pada dua node.
val numbersDfR = numbersDf.repartition(2)
Berikut adalah bagaimana numbersDfRdata dipartisi di mesin saya:
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
The repartitionMetode membuat partisi baru dan merata mendistribusikan data dalam partisi baru (distribusi data lebih bahkan untuk set data yang lebih besar).
Perbedaan antara coalescedanrepartition
coalescemenggunakan partisi yang ada untuk meminimalkan jumlah data yang dikocok. repartitionmembuat partisi baru dan melakukan pengocokan penuh. coalescemenghasilkan partisi dengan jumlah data yang berbeda (kadang-kadang partisi yang memiliki ukuran yang jauh berbeda) dan repartitionmenghasilkan partisi berukuran kurang lebih sama.
Apakah coalesceatau repartitionlebih cepat?
coalescemungkin 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 repartitionkeseluruhan 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 movementdaripadaavoiding data movement.