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