Skip to content

zip_with(left, right, f)

Описание

Функция zip_with() объединяет два массива с помощью указанной функции, применяя её к соответствующим элементам массивов.

Параметры

  • left: Column - первый массив
  • right: Column - второй массив
  • f: Column - функция, которая принимает два аргумента и возвращает результат

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

Column - новый массив, полученный в результате применения функции к соответствующим элементам

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

from pyspark.sql.functions import zip_with, array, col, expr
from pyspark.sql import SparkSession

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

# Создаем DataFrame с массивами
data = [
    ([1, 2, 3], [4, 5, 6]),
    ([10, 20], [30, 40])
]
df = spark.createDataFrame(data, ["arr1", "arr2"])

# Объединяем массивы с помощью различных функций
result = df.withColumn(
    "sum",
    zip_with("arr1", "arr2", expr("(x, y) -> x + y"))
).withColumn(
    "concat",
    zip_with("arr1", "arr2", expr("(x, y) -> concat(x, y)"))
)
result.show(truncate=False)

# Результат:
# +---------+---------+------------+----------------+
# |arr1     |arr2     |sum         |concat          |
# +---------+---------+------------+----------------+
# |[1, 2, 3]|[4, 5, 6]|[5, 7, 9]   |[14, 25, 36]   |
# |[10, 20] |[30, 40] |[40, 60]    |[1030, 2040]   |
# +---------+---------+------------+----------------+

Примечания

  • Возвращает NULL, если любой из массивов NULL
  • Если массивы разной длины, результат будет иметь длину меньшего массива
  • Полезно для:
  • Поэлементных операций над массивами
  • Объединения данных из разных массивов
  • Создания новых массивов на основе существующих
  • Связанные функции:
  • array_zip() - объединение массивов в массив кортежей
  • transform() - применение функции к элементам массива