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-столбцом