Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt eine benutzerdefinierte PyArrow-systemeigene Tabellenfunktion (UDTF). Diese Funktion stellt eine pyArrow-native Schnittstelle für UDTFs bereit, bei der die eval-Methode PyArrow RecordBatches oder Arrays empfängt und einen Iterator von PyArrow Tables oder RecordBatches zurückgibt. Dies ermöglicht eine echte vektorisierte Berechnung ohne Zeilenverarbeitungsaufwand.
Syntax
from pyspark.databricks.sql import functions as dbf
@dbf.arrow_udtf(returnType=<returnType>)
class MyUDTF:
def eval(self, ...):
...
Die Parameter
| Parameter | Typ | Description |
|---|---|---|
cls |
classwahlfrei |
Die benutzerdefinierte Python-Tabellenfunktionshandlerklasse. |
returnType |
pyspark.sql.types.StructType oder str, optional |
Der Rückgabetyp der benutzerdefinierten Tabellenfunktion. Der Wert kann entweder ein StructType-Objekt oder eine DDL-formatierte Strukturtypzeichenfolge sein. |
Examples
UDTF mit PyArrow RecordBatch-Eingabe:
import pyarrow as pa
from pyspark.databricks.sql.functions import arrow_udtf
@arrow_udtf(returnType="x int, y int")
class MyUDTF:
def eval(self, batch: pa.RecordBatch):
# Process the entire batch vectorized
x_array = batch.column('x')
y_array = batch.column('y')
result_table = pa.table({
'x': x_array,
'y': y_array
})
yield result_table
df = spark.range(10).selectExpr("id as x", "id as y")
MyUDTF(df.asTable()).show()
UDTF mit PyArrow Array-Eingaben:
@arrow_udtf(returnType="x int, y int")
class MyUDTF2:
def eval(self, x: pa.Array, y: pa.Array):
# Process arrays vectorized
result_table = pa.table({
'x': x,
'y': y
})
yield result_table
MyUDTF2(lit(1), lit(2)).show()
Hinweis
- Die eval-Methode muss PyArrow RecordBatches oder Arrays als Eingabe akzeptieren.
- Die eval-Methode muss PyArrow Tables oder RecordBatches als Ausgabe liefern.