python - 更换 Spark 的 CASE WHEN THEN
问题描述
我是 Spark 的新手,正在尝试优化另一位开发人员编写的代码。场景如下:
- 有一个包含三个键值对的字典列表。第一个是源:值,第二个是目标:值,第三个是列:值。
- CASE WHEN THEN 语句是根据以上三个键值对生成的。例如,字典列表如下:
values = [{'target': 'Unknown', 'source': '', 'column': 'gender'},
{'target': 'F', 'source': '0', 'column': 'gender'},
{'target': 'M', 'source': '1', 'column': 'gender'},
{'target': 'F', 'source': 'F', 'column': 'gender'},
{'target': 'F', 'source': 'Fe', 'column': 'gender'}]
- 以下代码生成随后的 CASE WHEN THEN 语句。
for value in values:
source_value = value.get("source")
op = op.when(df[column] == source, value.get("target"))
Column<'CASE WHEN (gender = ) THEN Unknown
WHEN (gender = 0) THEN F
WHEN (gender = 1) THEN M
WHEN (gender = F) THEN F
WHEN (gender = Fe) THEN F END'>
- 然后使用此 CASE WHEN THEN 来从数据帧中选择数据。
问题:CASE WHEN THEN 的用法在这里是否有效(是否已优化)?一些 CASE WHEN 语句非常冗长(大约 1000+)。有没有更好的方法来重做代码(也许是正则表达式)?
我查看了以下问题,但与我的情况无关。 CASE WHEN ... THEN SPARK SQL - 当时的情况
谢谢。
解决方案
推荐阅读
- sql - Proc sql将列添加到订单获胜者
- c# - 将数据库项目与列表进行比较
输入 - java - 使用spring从配置文件中加载值
- javascript - getElementById totalupdate 结果显示在 js 警报框上
- mysql - SQL 使用子查询选择前 20 条记录并将行透视到列
- git - 将标志添加到要在挂钩中使用的 git 命令
- django - Django ModelForm 错误“这是必填字段”
- python - 在python中将节点添加到json
- php - 在 Woocommerce 中向客户发送订单失败电子邮件通知
- reactjs - fetch api 调用数据未定义