我在Pyspark中遇到了一个问题,它基于另一个列中的值为新的 Dataframe 创建一个列。这很无聊,在我看来,使用大量的
CASE
WHEN column_a = 'value_1' THEN 'value_x'
WHEN column_a = 'value_2' THEN 'value_y'
...
WHEN column_a = 'value_289' THEN 'value_xwerwz'
END
在这种情况下,在python中,我习惯于使用一个dict或者更好的一个configparser文件来避免if else条件,我只需要传递键,python就会返回想要的值,而且,我们为ELSE子句提供了一个“fallback”选项。
在我看来,问题是我们不是在一个命令中处理一行,而是所有行,因此使用dict/map/configparser是一个不可用的选项。我曾想过使用dict循环,但它似乎太慢,而且在重复所有条件时浪费计算。
我还在寻找这种做法,如果我找到了,我会把它贴在这里。但是,你知道,可能很多人已经使用它,我还不知道。但如果没有其他方法,好吧。使用许多当那么条件将不是一个选择。
谢谢
我尝试使用dict并搜索了如下解决方案
2条答案
按热度按时间v440hwme1#
一种选择是使用字典创建 Dataframe 并执行连接
这是可行的:
创建 Dataframe :
执行联接:
我们可以广播
dict_df
,因为它很小。输入:
字典_df:
输出:
或者,可以使用UDF-但不建议这样做。
ma8fv8wu2#
你可以创建一个函数,将一个dict转换成一个Spark F.,例如:
输出: