Skip to content

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