map_filter(map, f)
Описание
Функция map_filter()
фильтрует элементы карты (map) с помощью указанной функции-предиката.
Параметры
map
: Column - карта (map)f
: Column - функция-предикат, которая принимает ключ и значение и возвращает boolean
Возвращаемое значение
Column - новая карта, содержащая только элементы, для которых функция-предикат вернула true
Пример использования
from pyspark.sql.functions import map_filter, map, expr
from pyspark.sql import SparkSession
# Создаем SparkSession
spark = SparkSession.builder.appName("map_filter_example").getOrCreate()
# Создаем DataFrame с картами
data = [
({"a": 1, "b": 2, "c": 3},),
({"x": 10, "y": 20, "z": 30},)
]
df = spark.createDataFrame(data, ["map"])
# Фильтруем элементы карты
result = df.withColumn(
"even_values",
map_filter("map", expr("(k, v) -> v % 2 == 0"))
).withColumn(
"greater_than_10",
map_filter("map", expr("(k, v) -> v > 10"))
)
result.show(truncate=False)
# Результат:
# +----------------+----------------+------------------+
# |map |even_values |greater_than_10 |
# +----------------+----------------+------------------+
# |{a -> 1, b -> 2}|{b -> 2} |{} |
# |{x -> 10, y -> 20}|{x -> 10, y -> 20}|{y -> 20, z -> 30}|
# +----------------+----------------+------------------+
Примечания
- Возвращает NULL, если карта NULL
- Возвращает пустую карту, если ни один элемент не удовлетворяет условию
- Полезно для:
- Фильтрации элементов карты
- Выбора элементов по условию
- Создания подмножеств карты
- Связанные функции:
transform_keys()
- преобразование ключей картыtransform_values()
- преобразование значений карты