PyArrow 네이티브 UDTF(사용자 정의 테이블 함수)를 만듭니다. 이 함수는 UDTF에 대한 PyArrow 네이티브 인터페이스를 제공합니다. 여기서 eval 메서드는 PyArrow RecordBatches 또는 배열을 수신하고 PyArrow 테이블 또는 RecordBatches의 반복기를 반환합니다. 이렇게 하면 행 단위 처리 오버헤드 없이 실제 벡터화된 계산을 수행할 수 있습니다.
문법
from pyspark.databricks.sql import functions as dbf
@dbf.arrow_udtf(returnType=<returnType>)
class MyUDTF:
def eval(self, ...):
...
매개 변수
| 매개 변수 | 유형 | Description |
|---|---|---|
cls |
class선택적 |
Python 사용자 정의 테이블 함수 처리기 클래스입니다. |
returnType |
pyspark.sql.types.StructType 또는 str, 선택 사항 |
사용자 정의 테이블 함수의 반환 형식입니다. 값은 StructType 개체 또는 DDL 형식 구조체 형식 문자열일 수 있습니다. |
예시
PyArrow RecordBatch 입력이 있는 UDTF:
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()
PyArrow 배열 입력이 있는 UDTF:
@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()
비고
- eval 메서드는 PyArrow RecordBatches 또는 배열을 입력으로 수락해야 합니다.
- eval 메서드는 PyArrow 테이블 또는 RecordBatches를 출력으로 생성해야 합니다.