udtf()
Описание
Функция udtf()
создает пользовательскую табличную функцию (UDTF), которая может возвращать несколько строк для каждой входной строки. UDTF позволяют реализовать сложную логику преобразования данных, которая не может быть выражена с помощью обычных UDF.
Параметры
f
: Callable - функция Python, возвращающая итератор или генераторreturnType
: StructType - структура возвращаемых данных
Возвращаемое значение
DataFrame - результат применения UDTF
Пример использования
from pyspark.sql import SparkSession
from pyspark.sql.functions import udtf, col
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
# Создаем SparkSession
spark = SparkSession.builder.appName("udtf_example").getOrCreate()
# Определяем схему возвращаемых данных
return_schema = StructType([
StructField("word", StringType()),
StructField("length", IntegerType())
])
# Создаем UDTF для разбиения строки на слова
@udtf(returnType=return_schema)
def split_words(text: str):
if text:
for word in text.split():
yield word, len(word)
# Создаем DataFrame
data = [
(1, "Hello World"),
(2, "PySpark UDTF"),
(3, "Example Text")
]
df = spark.createDataFrame(data, ["id", "text"])
# Применяем UDTF
result = df.select(
"id",
split_words(col("text")).alias("words")
).show()
# Результат:
# +---+----------+
# | id| words|
# +---+----------+
# | 1|{Hello, 5}|
# | 1|{World, 5}|
# | 2|{PySpark, 7}|
# | 2|{UDTF, 4}|
# | 3|{Example, 7}|
# | 3|{Text, 4}|
# +---+----------+
Примечания
- UDTF могут возвращать несколько строк для каждой входной строки
- Схема возвращаемых данных должна быть явно определена
- Для простых преобразований используйте
udf()
- Для работы с пакетами данных используйте
pandas_udf()
- Для вызова UDF используйте
call_udf()