Justins Antwort ist großartig und diese Antwort geht tiefer.
Der repartition
Algorithmus 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 repartition
Methode vollständig mischen und diese Daten auf zwei Knoten abrufen.
val numbersDfR = numbersDf.repartition(2)
So werden die numbersDfR
Daten auf meinem Computer partitioniert:
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
Die repartition
Methode erstellt neue Partitionen und verteilt die Daten gleichmäßig in den neuen Partitionen (die Datenverteilung ist bei größeren Datenmengen gleichmäßiger).
Unterschied zwischen coalesce
undrepartition
coalesce
Verwendet vorhandene Partitionen, um die Datenmenge zu minimieren, die gemischt wird. repartition
Erstellt neue Partitionen und mischt vollständig. coalesce
Dies führt zu Partitionen mit unterschiedlichen Datenmengen (manchmal Partitionen mit sehr unterschiedlichen Größen) und repartition
zu ungefähr gleich großen Partitionen.
Ist coalesce
oder repartition
schneller?
coalesce
lä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 movement
alsavoiding data movement
.