Pular para o conteúdo principal

seta_udtf

Cria uma função de tabela definida pelo usuário (UDTF) nativa do PyArrow. Esta função fornece uma interface nativa do PyArrow para UDTFs, onde o método eval recebe RecordBatches ou Arrays do PyArrow e retorna um Iterator de Tabelas ou RecordBatches do PyArrow. Isso possibilita computação verdadeiramente vetorizada sem a sobrecarga do processamento linha por linha.

Sintaxe

Python
from pyspark.sql import functions as dbf

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

Parâmetros

Parâmetro

Tipo

Descrição

cls

class, opcional

Classe de manipulador de função de tabela definida pelo usuário em Python.

returnType

pyspark.sql.types.StructType ou str, opcional

O tipo de retorno da função de tabela definida pelo usuário. O valor pode ser um objeto StructType ou uma string de tipo struct formatada em DDL.

Parâmetro

Tipo

Descrição

cls

class, opcional

Classe de manipulador de função de tabela definida pelo usuário em Python.

returnType

pyspark.sql.types.StructType ou str, opcional

O tipo de retorno da função de tabela definida pelo usuário. O valor pode ser um objeto StructType ou uma string de tipo struct formatada em DDL.

Exemplos

UDTF com entrada RecordBatch do PyArrow:

Python
import pyarrow as pa
from pyspark.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 de matriz PyArrow:

Python
@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()
nota
  • O método `eval` deve aceitar `PyArrow RecordBatches` ou `Arrays` como entrada.
  • O método `eval` deve retornar tabelas PyArrow ou lotes de registros como saída.