Поделиться через


str_to_map

Преобразует строку в карту после разделения текста на пары "ключ-значение" с помощью разделителей. Как pairDelim, так и keyValueDelim обрабатываются как регулярные выражения.

Синтаксис

from pyspark.sql import functions as sf

sf.str_to_map(text, pairDelim=None, keyValueDelim=None)

Параметры

Параметр Тип Description
text pyspark.sql.Column или str Входной столбец или строки.
pairDelim pyspark.sql.Column или str, необязательный Разделитель, используемый для разделения пар. По умолчанию используется запятая (,).
keyValueDelim pyspark.sql.Column или str, необязательный Разделитель, используемый для разделения ключа и значения. По умолчанию используется двоеточие (:).

Возвраты

pyspark.sql.Column: новый столбец типа карты, в котором каждая строка в исходном столбце преобразуется в карту.

Примеры

Пример 1. Использование разделителей по умолчанию

from pyspark.sql import functions as sf
df = spark.createDataFrame([("a:1,b:2,c:3",)], ["e"])
df.select(sf.str_to_map(df.e)).show(truncate=False)
+------------------------+
|str_to_map(e, ,, :)     |
+------------------------+
|{a -> 1, b -> 2, c -> 3}|
+------------------------+

Пример 2. Использование настраиваемых разделителей

from pyspark.sql import functions as sf
df = spark.createDataFrame([("a=1;b=2;c=3",)], ["e"])
df.select(sf.str_to_map(df.e, sf.lit(";"), sf.lit("="))).show(truncate=False)
+------------------------+
|str_to_map(e, ;, =)     |
+------------------------+
|{a -> 1, b -> 2, c -> 3}|
+------------------------+

Пример 3. Использование разных разделителей для разных строк

from pyspark.sql import functions as sf
df = spark.createDataFrame([("a:1,b:2,c:3",), ("d=4;e=5;f=6",)], ["e"])
df.select(sf.str_to_map(df.e,
  sf.when(df.e.contains(";"), sf.lit(";")).otherwise(sf.lit(",")),
  sf.when(df.e.contains("="), sf.lit("=")).otherwise(sf.lit(":"))).alias("str_to_map")
).show(truncate=False)
+------------------------+
|str_to_map              |
+------------------------+
|{a -> 1, b -> 2, c -> 3}|
|{d -> 4, e -> 5, f -> 6}|
+------------------------+

Пример 4. Использование столбца разделителей

from pyspark.sql import functions as sf
df = spark.createDataFrame([("a:1,b:2,c:3", ","), ("d=4;e=5;f=6", ";")], ["e", "delim"])
df.select(sf.str_to_map(df.e, df.delim, sf.lit(":"))).show(truncate=False)
+---------------------------------------+
|str_to_map(e, delim, :)                |
+---------------------------------------+
|{a -> 1, b -> 2, c -> 3}               |
|{d=4 -> NULL, e=5 -> NULL, f=6 -> NULL}|
+---------------------------------------+

Пример 5. Использование столбца разделителей ключей и значений

from pyspark.sql import functions as sf
df = spark.createDataFrame([("a:1,b:2,c:3", ":"), ("d=4;e=5;f=6", "=")], ["e", "delim"])
df.select(sf.str_to_map(df.e, sf.lit(","), df.delim)).show(truncate=False)
+------------------------+
|str_to_map(e, ,, delim) |
+------------------------+
|{a -> 1, b -> 2, c -> 3}|
|{d -> 4;e=5;f=6}        |
+------------------------+