Skip to content

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()