python - tutorial - spark.createdataframe pyspark



Warum ist Apache-Spark-Python lokal so langsam im Vergleich zu Pandas? (1)

Weil:

  • Apache Spark ist ein komplexes Framework, das die Verarbeitung auf Hunderte von Knoten verteilt und dabei Korrektheit und Fehlertoleranz gewährleistet. Jede dieser Eigenschaften hat erhebliche Kosten.
  • Denn rein speicherinterne In-Core-Verarbeitung (Pandas) ist um Größenordnungen schneller als Festplatten- und Netzwerk- (auch lokale) I / O-Vorgänge (Spark).
  • Da Parallelität (und verteilte Verarbeitung) einen erheblichen Mehraufwand verursachen und selbst bei optimaler (peinlich paralleler Arbeitslast) keine Leistungsverbesserungen garantieren.
  • Weil der lokale Modus nicht auf Leistung ausgelegt ist. Es wird zum Testen verwendet.
  • Last but not least - 2 Kerne mit 393 MB reichen nicht aus, um Leistungsverbesserungen zu erzielen, und ein einzelner Knoten bietet keine Möglichkeit zur Verteilung
  • Also Spark: Inkonsistente Performance-Zahl bei der Skalierung der Anzahl der Kerne . Warum ist Pyspark so viel langsamer beim Ermitteln des Maximums einer Spalte? Warum läuft mein Spark langsamer als reines Python? Leistungsvergleich

So kann man noch lange weitermachen ...

Ein Spark-Neuling hier. Ich habe kürzlich angefangen, mit Spark auf meinem lokalen Computer auf zwei Kernen herumzuspielen, indem ich den folgenden Befehl verwendet habe:

pyspark --master local[2]

Ich habe eine 393-MB-Textdatei mit fast einer Million Zeilen. Ich wollte eine Datenmanipulationsoperation ausführen. Ich verwende die eingebauten Datenrahmenfunktionen von PySpark, um einfache Operationen wie groupBy , sum , max , stddev .

Wenn ich jedoch genau die gleichen Operationen in Pandas mit genau dem gleichen Datensatz durchführe, scheinen Pandas Pyspark in Bezug auf die Latenz um ein Vielfaches zu besiegen.

Ich habe mich gefragt, was ein möglicher Grund dafür sein könnte. Ich habe ein paar Gedanken.

  1. Führen eingebaute Funktionen zu einer ineffizienten Serialisierung / Deserialisierung? Wenn ja, welche Alternativen gibt es dazu?
  2. Ist die Datenmenge zu klein, um die Gemeinkosten der zugrunde liegenden JVM, auf der der Funke ausgeführt wird, nicht zu übersteigen?

Danke fürs schauen. Sehr geschätzt.





apache-spark-sql