Skip to content

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