Justins Antwort ist großartig und diese Antwort geht tiefer.
Der repartitionAlgorithmus mischt vollständig und erstellt neue Partitionen mit Daten, die gleichmäßig verteilt sind. Erstellen wir einen DataFrame mit den Zahlen 1 bis 12.
val x = (1 to 12).toList
val numbersDf = x.toDF("number")
numbersDf enthält 4 Partitionen auf meinem Computer.
numbersDf.rdd.partitions.size // => 4
So werden die Daten auf die Partitionen aufgeteilt:
Partition 00000: 1, 2, 3
Partition 00001: 4, 5, 6
Partition 00002: 7, 8, 9
Partition 00003: 10, 11, 12
Lassen Sie uns die repartitionMethode vollständig mischen und diese Daten auf zwei Knoten abrufen.
val numbersDfR = numbersDf.repartition(2)
So werden die numbersDfRDaten auf meinem Computer partitioniert:
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
Die repartitionMethode erstellt neue Partitionen und verteilt die Daten gleichmäßig in den neuen Partitionen (die Datenverteilung ist bei größeren Datenmengen gleichmäßiger).
Unterschied zwischen coalesceundrepartition
coalesceVerwendet vorhandene Partitionen, um die Datenmenge zu minimieren, die gemischt wird. repartitionErstellt neue Partitionen und mischt vollständig. coalesceDies führt zu Partitionen mit unterschiedlichen Datenmengen (manchmal Partitionen mit sehr unterschiedlichen Größen) und repartitionzu ungefähr gleich großen Partitionen.
Ist coalesceoder repartitionschneller?
coalesceläuft möglicherweise schneller als repartition, aber Partitionen mit ungleicher Größe arbeiten im Allgemeinen langsamer als Partitionen mit gleicher Größe. Normalerweise müssen Sie Datasets nach dem Filtern eines großen Datensatzes neu partitionieren. Ich habe festgestellt repartition, dass Spark insgesamt schneller ist, da Spark für Partitionen gleicher Größe ausgelegt ist.
NB Ich habe merkwürdigerweise beobachtet, dass eine Neupartitionierung die Größe der Daten auf der Festplatte erhöhen kann . Stellen Sie sicher, dass Sie Tests ausführen, wenn Sie Repartition / Coalesce für große Datenmengen verwenden.
Lesen Sie diesen Blog-Beitrag, wenn Sie noch mehr Details wünschen.
Wenn Sie in der Praxis Coalesce & Repartition verwenden
minimize data movementalsavoiding data movement.