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()
- применение функции к элементам массива