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