arrays_zip(*cols)
Описание
Функция arrays_zip()
возвращает объединенный массив структур, в котором N-я структура содержит все N-е значения входных массивов. Если массивы имеют разную длину, то для более коротких массивов используются NULL значения.
Параметры
*cols
: Column - массивы для объединения
Возвращаемое значение
Array - массив структур, где каждая структура содержит элементы из соответствующих позиций входных массивов
Пример использования
from pyspark.sql.functions import arrays_zip, array, lit
# Создаем DataFrame с массивами
df = spark.createDataFrame([
([1, 2, 3], ["a", "b", "c"], [10, 20, 30]),
([4, 5], ["d", "e"], [40, 50, 60]),
(None, ["x", "y"], [100, 200])
], ["numbers", "letters", "values"])
# Объединяем массивы
df.select(
"numbers",
"letters",
"values",
arrays_zip("numbers", "letters", "values").alias("zipped")
).show(truncate=False)
# Результат:
# +---------+---------+---------+--------------------------------+
# |numbers |letters |values |zipped |
# +---------+---------+---------+--------------------------------+
# |[1, 2, 3]|[a, b, c]|[10, 20, 30]|[{numbers=1, letters=a, values=10}, {numbers=2, letters=b, values=20}, {numbers=3, letters=c, values=30}]|
# |[4, 5] |[d, e] |[40, 50, 60]|[{numbers=4, letters=d, values=40}, {numbers=5, letters=e, values=50}, {numbers=null, letters=null, values=60}]|
# |null |[x, y] |[100, 200] |[{numbers=null, letters=x, values=100}, {numbers=null, letters=y, values=200}]|
# +---------+---------+---------+--------------------------------+
# Пример с двумя массивами
df = spark.createDataFrame([
(["apple", "banana"], [1, 2]),
(["orange"], [3, 4, 5])
], ["fruits", "counts"])
df.select(
"fruits",
"counts",
arrays_zip("fruits", "counts").alias("fruit_counts")
).show(truncate=False)
Примечания
- Если один из массивов NULL, соответствующие значения в структурах будут NULL
- Если массивы имеют разную длину, для более коротких массивов используются NULL значения
- Для создания массива используйте
array()
- Для объединения массивов используйте
array_union()
- Для нахождения пересечения массивов используйте
array_intersect()
- Для удаления дубликатов из массива используйте
array_distinct()