Skip to content

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()