Кто-нибудь знает, как реализовать какой-то эквивалент defaultdict в pyspark? Пока у меня есть
import pyspark.sql.functions as F
import pandas as pd
from itertools import chain
from collections import defaultdict
example_dict = defaultdict(
lambda: "Unmapped",
{"zero": 0,
"one": 1,
"two": 2})
mapping = F.create_map([F.lit(x) for x in chain(*example_dict.items())])
d = {'col1': [0, 1, 2, 3]}
df = pd.DataFrame(data=d)
dfs = spark.createDataFrame(df).withColumn("map", mapping.getItem(F.col("col1")))
dfs.show()
+----+-----+
|col1| map|
+----+-----+
| 0| null|
| 1| one|
| 2| two|
| 3|three|
+----+-----+
, и, по-видимому, опция по умолчанию не работает должным образом, однако, если я применяю это к pandas фрейму данных, он работает нормально:
df["map"] = df["col1"].map(example_dict)
col1 map
0 0 Unmapped
1 1 one
2 2 two
3 3 three
Я не уверен, что это потому, что pyspark не поддерживает defaultdict или я допустил ошибку в реализации.