array_filter
Теги: array functions pyspark
Описание
Функция array_filter()
фильтрует элементы массива с помощью указанной функции-предиката.
Параметры
col
: Column - массив для фильтрацииf
: Function - функция-предикат, которая принимает элемент массива и возвращает boolean
Возвращаемое значение
Column - отфильтрованный массив
Пример
from pyspark.sql import SparkSession
from pyspark.sql.functions import array_filter, col
# Создаем Spark сессию
spark = SparkSession.builder.appName("array_filter_example").getOrCreate()
# Создаем DataFrame с массивами
data = [([1, 2, 3, 4, 5],), ([10, 20, 30],)]
df = spark.createDataFrame(data, ["numbers"])
# Фильтруем четные числа
df = df.withColumn("even_numbers",
array_filter("numbers", lambda x: x % 2 == 0))
# Фильтруем числа больше 3
df = df.withColumn("greater_than_3",
array_filter("numbers", lambda x: x > 3))
df.show(truncate=False)
# Вывод:
# +------------+------------+---------------+
# |numbers |even_numbers|greater_than_3 |
# +------------+------------+---------------+
# |[1, 2, 3, 4, 5]|[2, 4] |[4, 5] |
# |[10, 20, 30]|[10, 20, 30]|[10, 20, 30] |
# +------------+------------+---------------+
Примечания
- Функция-предикат должна возвращать boolean
- Возвращает пустой массив, если все элементы отфильтрованы
- Возвращает NULL, если входной массив NULL
- Полезно для фильтрации элементов массива по условию
- Можно использовать с lambda-функциями или UDF