Partage via


arrow_udtf

Crée une fonction de table définie par l’utilisateur native PyArrow (UDTF). Cette fonction fournit une interface native PyArrow pour les fonctions définies par l’utilisateur, où la méthode eval reçoit PyArrow RecordBatches ou Arrays et retourne un itérateur de tables PyArrow ou RecordBatches. Cela permet un calcul vectorisé vrai sans surcharge de traitement de ligne par ligne.

Syntaxe

from pyspark.databricks.sql import functions as dbf

@dbf.arrow_udtf(returnType=<returnType>)
class MyUDTF:
    def eval(self, ...):
        ...

Paramètres

Paramètre Type Descriptif
cls classoptionnel Classe de gestionnaire de fonction table définie par l’utilisateur Python.
returnType pyspark.sql.types.StructType ou str, facultatif Type de retour de la fonction de table définie par l’utilisateur. La valeur peut être un objet StructType ou une chaîne de type de struct au format DDL.

Examples

UDTF avec l’entrée RecordBatch PyArrow :

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 avec les entrées PyArrow Array :

@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()

Note

  • La méthode eval doit accepter PyArrow RecordBatches ou Arrays comme entrée
  • La méthode eval doit générer des tables PyArrow ou RecordBatches en tant que sortie