Partilhar via


arrow_udtf

Cria uma função de tabela definida pelo utilizador (UDTF) nativa do PyArrow. Esta função fornece uma interface nativa PyArrow para UDTFs, onde o método de avaliação recebe RecordBatches ou Arrays PyArrow e devolve um Iterador de Tabelas ou RecordBatches PyArrow. Isto permite um verdadeiro cálculo vetorizado sem sobrecarga de processamento linha a linha.

Sintaxe

from pyspark.databricks.sql import functions as dbf

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

Parâmetros

Parâmetro Tipo Description
cls class, opcional A classe de manipulador de funções de tabela definida pelo utilizador em Python.
returnType pyspark.sql.types.StructType ou str, opcional O tipo de retorno da função de tabela definida pelo utilizador. O valor pode ser um objeto StructType ou uma cadeia de struct formatada em DDL.

Examples

UDTF com entrada PyArrow RecordBatch:

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 com entradas do 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()

Observação

  • O método de avaliação deve aceitar PyArrow RecordBatches ou Arrays como entrada
  • O método de avaliação deve gerar Tabelas PyArrow ou RecordBatches como saída