unwrap_udt()
Описание
Функция unwrap_udt()
извлекает значение из пользовательского типа данных (UDT). UDT - это пользовательские типы данных, которые могут быть созданы для хранения сложных структур данных.
Параметры
column
: Column - столбец с пользовательским типом данных
Возвращаемое значение
Column - извлеченное значение из UDT
Пример использования
from pyspark.sql import SparkSession
from pyspark.sql.functions import unwrap_udt, col
from pyspark.sql.types import UserDefinedType, StringType, IntegerType
# Создаем SparkSession
spark = SparkSession.builder.appName("unwrap_udt_example").getOrCreate()
# Определяем пользовательский тип данных
class PointUDT(UserDefinedType):
def __init__(self):
self.sqlType = StructType([
StructField("x", IntegerType()),
StructField("y", IntegerType())
])
def serialize(self, obj):
return {"x": obj.x, "y": obj.y}
def deserialize(self, datum):
return Point(datum["x"], datum["y"])
# Регистрируем UDT
spark.udf.register("PointUDT", PointUDT)
# Создаем DataFrame с UDT
data = [
(1, Point(1, 2)),
(2, Point(3, 4)),
(3, Point(5, 6))
]
df = spark.createDataFrame(data, ["id", "point"])
# Извлекаем значения из UDT
result = df.select(
"id",
unwrap_udt(col("point")).alias("unwrapped_point")
).show()
# Результат:
# +---+---------------+
# | id|unwrapped_point|
# +---+---------------+
# | 1| {1, 2} |
# | 2| {3, 4} |
# | 3| {5, 6} |
# +---+---------------+
Примечания
- Функция работает только с пользовательскими типами данных (UDT)
- Для создания UDT используйте класс
UserDefinedType
- Для регистрации UDT используйте
spark.udf.register()
- Для работы с обычными типами данных используйте встроенные функции PySpark