Effizienteres Laden von Parkettdateien in Spark (pySpark v1.2.0)

8

Ich lade in hochdimensionale Parkett-Dateien, brauche aber nur ein paar Spalten. Mein aktueller Code sieht so aus:

%Vor%

Mein geistiges Modell für das, was passiert, ist, dass es alle Daten einlädt und dann die Spalten auswirft, die ich nicht haben will. Ich würde es natürlich vorziehen, in diesen Spalten nicht einmal zu lesen, und von dem, was ich über Parkett verstehe, scheint das möglich zu sein.

Also gibt es zwei Fragen:

  1. Ist mein mentales Modell falsch? Oder ist der Spark-Compiler so intelligent, dass er im obigen Beispiel nur die Spalten a, b und c liest?
  2. Wie kann ich sqc.parquetFile() dazu zwingen, Daten effizienter einzulesen?
jarfa 22.04.2015, 16:33
quelle

3 Antworten

4

Sie sollten die Spark DataFrame-API verwenden: Ссылка

Etwas wie

%Vor%

Oder Sie können Spark SQL verwenden:

%Vor%     
kostya 21.05.2015, 07:45
quelle
0

Spark macht Dinge immer auf eine faule Art und Weise, indem er eine native Scala-Funktion verwendet. Der Scala-Code ist bereits kompiliert und macht die Laufzeit intelligent, ich meine faul, Entscheidungen. Mit Parkett sollte es nur die notwendigen Daten lesen, auf die der Code verweist. Das hängt natürlich von der Struktur der jeweiligen Parkettfeile ab. Der Punkt ist, dass es das Spaltenformat ausnutzen wird. Ich weiß nicht genug über Python, aber es sollte in der Lage sein, das Gleiche zu tun. Vielleicht überprüfen Sie, ob die Klasse pyspark Row irgendeine Art von fauler Magie verwendet. Eine schnelle Möglichkeit zur Überprüfung besteht darin, ein kontrolliertes Experiment durchzuführen, eine weitere rdd-Operation zu schreiben, die mehr Felder referenziert, diese aber nicht ausgibt. Dann können Sie einfach den Zeitunterschied der Wanduhr zwischen den 2 Operationen vergleichen. Abhängig von einigen relevanten Details der zugrunde liegenden Parkettdatei, sehen Sie möglicherweise nicht den Unterschied, auch wenn es lazy lädt.

    
user3931226 14.05.2015 18:40
quelle
0

Ja, es werden nur Felder von Disk ausgewählt.

"öffnet alle Datendateien, liest aber nur den Teil jeder Datei, der die Werte für diese Spalte enthält. Die Spaltenwerte werden fortlaufend gespeichert, wodurch die für die Verarbeitung der Werte innerhalb einer einzelnen Spalte erforderlichen E / A minimiert werden."

Diese Dokumentation ist für Impalas gedacht, ich denke, Leselogik ist für Funken auch die gleiche Ссылка

    
spats 15.02.2016 03:35
quelle