Share via


arrow_udtf

Hiermee maakt u een door de gebruiker gedefinieerde tabelfunctie (UDTF) van PyArrow. Deze functie biedt een systeemeigen PyArrow-interface voor UDDF's, waarbij de eval-methode PyArrow RecordBatches of Arrays ontvangt en een Iterator van PyArrow Tables of RecordBatches retourneert. Dit maakt true vectorized berekening mogelijk zonder rij-by-row verwerkingsoverhead.

Syntaxis

from pyspark.databricks.sql import functions as dbf

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

Parameterwaarden

Kenmerk Typologie Description
cls classfacultatief De door de gebruiker gedefinieerde tabelfunctiehandlerklasse van Python.
returnType pyspark.sql.types.StructType of str, optioneel Het retourtype van de door de gebruiker gedefinieerde tabelfunctie. De waarde kan een StructType-object of een DDL-indelingstypetekenreeks zijn.

Voorbeelden

UDTF met PyArrow RecordBatch-invoer:

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 met PyArrow-matrixinvoer:

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

Opmerking

  • De eval-methode moet PyArrow RecordBatches of Arrays als invoer accepteren
  • De evaluatiemethode moet PyArrow Tables of RecordBatches als uitvoer opleveren