dataframe.rdd.partitions.size
ist eine andere Alternative neben df.rdd.getNumPartitions()
oder df.rdd.length
.
Lassen Sie mich dies anhand eines vollständigen Beispiels erklären ...
val x = (1 to 10).toList
val numberDF = x.toDF(“number”)
numberDF.rdd.partitions.size // => 4
Um zu beweisen, wie viele Partitionen wir oben haben ... speichern Sie diesen Datenrahmen als CSV
numberDF.write.csv(“/Users/Ram.Ghadiyaram/output/numbers”)
So werden die Daten auf den verschiedenen Partitionen getrennt.
Partition 00000: 1, 2
Partition 00001: 3, 4, 5
Partition 00002: 6, 7
Partition 00003: 8, 9, 10
Update:
@Hemanth hat im Kommentar eine gute Frage gestellt ... im Grunde genommen, warum die Anzahl der Partitionen im obigen Fall 4 beträgt
Kurze Antwort: Hängt von Fällen ab, in denen Sie ausführen. seit ich local [4] verwendet habe, habe ich 4 Partitionen bekommen.
Lange Antwort :
Ich habe das obige Programm auf meinem lokalen Computer ausgeführt und Master als lokales [4] verwendet, basierend darauf, dass es als 4 Partitionen verwendet wurde.
val spark = SparkSession.builder()
.appName(this.getClass.getName)
.config("spark.master", "local[4]").getOrCreate()
Wenn seine Funkenschale aus Mastergarn besteht, habe ich die Anzahl der Partitionen als 2 erhalten
Beispiel: spark-shell --master yarn
und tippte dieselben Befehle erneut ein
scala> val x = (1 to 10).toList
x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val numberDF = x.toDF("number")
numberDF: org.apache.spark.sql.DataFrame = [number: int]
scala> numberDF.rdd.partitions.size
res0: Int = 2
- hier ist 2 Standardparllelismus des Funkens
- Basierend auf dem Hash-Partitionierer-Funken wird entschieden, wie viele Partitionen verteilt werden sollen. Wenn Sie in
--master local
und basierend auf Ihrem Runtime.getRuntime.availableProcessors()
dh ausgeführt werden local[Runtime.getRuntime.availableProcessors()]
, wird versucht, diese Anzahl von Partitionen zuzuweisen. Wenn Ihre verfügbare Anzahl von Prozessoren 12 ist (dh local[Runtime.getRuntime.availableProcessors()])
Sie eine Liste von 1 bis 10 haben, werden nur 10 Partitionen erstellt.
HINWEIS:
Wenn Sie sich auf einem 12-Core-Laptop befinden, auf dem ich ein Spark-Programm ausführe, und standardmäßig die Anzahl der Partitionen / Tasks die Anzahl aller verfügbaren Kerne ist, dh 12. Das bedeutet, local[*]
oder
s"local[${Runtime.getRuntime.availableProcessors()}]")
in diesem Fall sind nur 10 Nummern vorhanden, sodass die Anzahl begrenzt wird bis 10
Unter Berücksichtigung all dieser Hinweise würde ich Ihnen empfehlen, es selbst zu versuchen