pyspark 如何使用多个列作为嵌套字典的Map来创建新的数据框列?

cbjzeqam  于 2023-06-21  发布在  Spark
关注(0)|答案(1)|浏览(131)

我尝试使用2个pyspark dataframe列作为嵌套字典的输入,以获得新pyspark列的输出。还希望解决方案扩展到具有4-5个级别的嵌套字典。
字典的形式是:dict_prob={“a”:{“x1”:“y1”,“x2:y2”},“b”:{“m1”:“n1”,“m2”:“n2”}}
输入列为:
| 指数|col1| col2|
| - -----|- -----|- -----|
| 0|一种|x1|
| 1|一种|x2|
| 2| B|平方米|
需要输出列
| col3|
| - -----|
| y1|
| y2|
| 氮气|
我尝试了下面的链接,但这些似乎适用于单个字典,而不是嵌套字典。PySpark create new column with mapping from a dictHow to use a column value as key to a dictionary in PySpark?

z18hc3ub

z18hc3ub1#

对于给定的示例,您可以使用简单的udf

from pyspark.sql.functions import udf

two_lvls = udf(lambda l1, l2: dict_prob[l1][l2])

df = df.withColumn("col3", two_lvls(df.col1, df.col2))

输出:

df.show()

+-----+----+----+----+
|index|col1|col2|col3|
+-----+----+----+----+
|    0|   a|  x1|  y1|
|    1|   a|  x2|  y2|
|    2|   b|  m2|  n2|
+-----+----+----+----+

相关问题