2016-11-14 2 views
4

Werden Datenextrakte schneller ausgeführt, wenn ein DataFrame sortiert wird, bevor er als Parquet-Dateien beibehalten wird.Verbesserungen der Spark-Leistung durch Speichern sortierter Parquet-Dateien

Angenommen, haben wir die folgende peopleDf Datenrahmen (so tun, als diese eine Probe und die wirkliche hat 20 Milliarden Zeilen):

+-----+----------------+ 
| age | favorite_color | 
+-----+----------------+ 
| 54 | blue   | 
| 10 | black   | 
| 13 | blue   | 
| 19 | red   | 
| 89 | blue   | 
+-----+----------------+ 

Lassen Sie uns sortierten und unsortierten Versionen dieses Datenframe-Dateien Parkett auszuschreiben.

peopleDf.write.parquet("s3a://some-bucket/unsorted/") 
peopleDf.sort($"favorite_color").write.parquet("s3a://some-bucket/sorted/") 

Gibt es Performance-Gewinne, wenn basierend auf favorite_color in den sortierten Daten und macht einen Datenextrakt zu lesen?

val pBlue1 = spark.read.parquet("s3a://some-bucket/unsorted/").filter($"favorite_color" === "blue") 

// is this faster? 

val pBlue2 = spark.read.parquet("s3a://some-bucket/sorted/").filter($"favorite_color" === "blue") 

Antwort

2

Sortierung bietet eine Reihe von Vorteilen:

  • effizientere Filterung Datei-Metadaten verwenden.
  • effizientere Kompressionsrate.

Wenn Sie auf einzelne Spalte Partitionierung auf dieser Spalte filtern möchten, können effizienter sein und nicht Shuffle erfordern, obwohl es einige damit zusammenhängende Fragen jetzt:

Verwandte Themen