map_concat(map1, map2, ...)
Описание
Функция map_concat()
объединяет несколько карт в одну. Если ключи повторяются, используются значения из последней карты.
Параметры
map1
,map2
, ...: Map - карты для объединения
Возвращаемое значение
Map - объединенная карта
Пример использования
from pyspark.sql.functions import map_concat, create_map, lit
# Создаем DataFrame с картами
df = spark.createDataFrame([
({"name": "John", "age": 30}, {"salary": 50000, "department": "IT"}),
({"id": 1, "name": "Alice"}, {"value": 100, "status": "active"}),
({"date": "2023-01-01", "amount": 100.5}, {"category": "expense", "currency": "USD"}),
(None, None)
], ["map1", "map2"])
# Объединяем карты
df.select(
"map1",
"map2",
map_concat("map1", "map2").alias("combined_map")
).show(truncate=False)
# Результат:
# +------------------------+------------------------+------------------------------------------+
# |map1 |map2 |combined_map |
# +------------------------+------------------------+------------------------------------------+
# |{name -> John, age -> 30}|{salary -> 50000, department -> IT}|{name -> John, age -> 30, salary -> 50000, department -> IT}|
# |{id -> 1, name -> Alice}|{value -> 100, status -> active}|{id -> 1, name -> Alice, value -> 100, status -> active}|
# |{date -> 2023-01-01, amount -> 100.5}|{category -> expense, currency -> USD}|{date -> 2023-01-01, amount -> 100.5, category -> expense, currency -> USD}|
# |null |null |null |
# +------------------------+------------------------+------------------------------------------+
# Пример с тремя картами
df = spark.createDataFrame([
({"a": 1, "b": 2}, {"c": 3, "d": 4}, {"e": 5, "f": 6}),
({"x": 10.5, "y": 20.0}, {"z": 30.75, "w": 40.0}, {"v": 50.25, "u": 60.0})
], ["map1", "map2", "map3"])
df.select(
"map1",
"map2",
"map3",
map_concat("map1", "map2", "map3").alias("combined_map")
).show(truncate=False)
Примечания
- Если любая из карт NULL, возвращается NULL
- При совпадении ключей используются значения из последней карты
- Для создания карты из массивов используйте
map_from_arrays()
- Для создания карты из массива записей используйте
map_from_entries()
- Для получения записей карты используйте
map_entries()