Skip to content

posexplode(column)

Описание

Функция posexplode() создает новую строку для каждого элемента в массиве или Map-столбце, сохраняя позицию элемента. Если столбец содержит NULL или пустой массив/Map, строка будет пропущена.

Параметры

  • column: Column - массив или Map-столбец для развертывания

Возвращаемое значение

StructType - структура с полями pos (позиция) и col (значение)

Пример использования

from pyspark.sql import SparkSession
from pyspark.sql.functions import posexplode

# Создаем SparkSession
spark = SparkSession.builder.appName("posexplode_example").getOrCreate()

# Создаем DataFrame с массивом
data = [
    (1, ["a", "b", "c"]),
    (2, ["x", "y"]),
    (3, [])
]
df = spark.createDataFrame(data, ["id", "array"])

# Развертываем массив с сохранением позиции
result = df.select(
    "id",
    posexplode("array").alias("pos", "value")
).show()

# Результат:
# +---+---+-----+
# | id|pos|value|
# +---+---+-----+
# |  1|  0|    a|
# |  1|  1|    b|
# |  1|  2|    c|
# |  2|  0|    x|
# |  2|  1|    y|
# +---+---+-----+

Примечания

  • Если массив или Map пустой или NULL, строка будет пропущена
  • Для сохранения строк с пустыми массивами используйте posexplode_outer()
  • Для развертывания без сохранения позиции используйте explode()
  • Для развертывания Map-столбца используйте posexplode() с Map-столбцом