Skip to content

str_to_map(text[, pairDelim, keyValueDelim])

Описание

Функция str_to_map() создает карту после разделения текста на пары ключ/значение с использованием разделителей. По умолчанию используются разделители ',' для пар и ':' для ключ/значение.

Параметры

  • text: str - текст для преобразования в карту
  • pairDelim: str (опционально) - разделитель пар (по умолчанию ',')
  • keyValueDelim: str (опционально) - разделитель ключ/значение (по умолчанию ':')

Возвращаемое значение

Map - карта с парами ключ/значение

Пример использования

from pyspark.sql.functions import str_to_map, lit

# Создаем DataFrame с текстовыми строками
df = spark.createDataFrame([
    ("name:John,age:30,salary:50000",),
    ("id:1,name:Alice,value:100",),
    ("date:2023-01-01,amount:100.5,category:expense",),
    (None,)
], ["text_data"])

# Преобразуем в карту
df.select(
    "text_data",
    str_to_map("text_data").alias("map_default"),
    str_to_map("text_data", "|", "=").alias("map_custom")
).show(truncate=False)

# Результат:
# +--------------------------------+------------------------------------------+------------------------------------------+
# |text_data                       |map_default                               |map_custom                                |
# +--------------------------------+------------------------------------------+------------------------------------------+
# |name:John,age:30,salary:50000   |{name -> John, age -> 30, salary -> 50000}|{name:John,age:30,salary:50000 -> null}   |
# |id:1,name:Alice,value:100       |{id -> 1, name -> Alice, value -> 100}    |{id:1,name:Alice,value:100 -> null}       |
# |date:2023-01-01,amount:100.5,category:expense|{date -> 2023-01-01, amount -> 100.5, category -> expense}|{date:2023-01-01,amount:100.5,category:expense -> null}|
# |null                            |null                                      |null                                      |
# +--------------------------------+------------------------------------------+------------------------------------------+

# Пример с разными разделителями
df = spark.createDataFrame([
    ("name=John|age=30|salary=50000",),
    ("id=1|name=Alice|value=100",)
], ["text_data"])

df.select(
    "text_data",
    str_to_map("text_data", "|", "=").alias("map")
).show(truncate=False)

Примечания

  • Если текст NULL, возвращается NULL
  • Если разделители не указаны, используются значения по умолчанию
  • Для создания карты из массивов используйте map_from_arrays()
  • Для получения ключей карты используйте map_keys()
  • Для получения значений карты используйте map_values()