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