GOOGLE ADS

Montag, 2. Mai 2022

Wie kann man "ungültige" benutzerdefinierte PySpark-Funktionen (UDF) erstellen und effizient ausführen, die nichts zurückgeben?

Angesichts der verfügbaren Methoden zum Angeben benutzerdefinierter Funktionen in PySpark:


  • Zeilenweise native PySpark-UDFs

  • Pandas-UDFs, die Apache Arrow verwenden


Wie könnte man eine benutzerdefinierte Funktion erstellen und auf einem Datenrahmen ausführen, die nichts zurückgibt, ohne eine neue Spalte erstellen zu müssen?

Beispiel: Angenommen, Sie wollten das Laden einer Datenrahmenspalte in einen externen Persistenzspeicher parallelisieren. Das heißt, anstatt den gesamten Datenrahmen in HDFS zu schreiben, verwenden Sie ein Feld als Schlüssel und ein anderes als Wert, um Zeile für Zeile in einen Blob-Speicher wie s3 zu übertragen.


Lösung des Problems

In einem solchen Fall würden Sie überhaupt nicht verwenden UDF. Es ist aus mehreren Gründen für die Aufgabe ungeeignet. Stattdessen verwenden Sie einfachforeach

foreach(f)

Wendet die f-Funktion auf alle Zeilen dieses DataFrame an.

oderforeachPartition

foreachPartition(f)

Wendet die f-Funktion auf jede Partition dieses DataFrame an.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...