python - PySpark - 条件语句
问题描述
我是 PySpark 的新手,想知道您是否可以指导我如何将以下 SAS 代码转换为 PySpark。
SAS 代码:
If ColA > Then Do;
If ColB Not In ('B') and ColC <= 0 Then Do;
New_Col = Sum(ColA, ColR, ColP);
End;
Else Do;
New_Col = Sum(ColA + ColR)
End;
End;
Else Do;
If ColB Not in ('B') and ColC <= 0 then do;
New_Col = Sum(ColR, ColP);
end;
Else Do;
New_Col = ColR;
End;
End;
目前,以下是我正在使用的 PySpark 逻辑:
df.withColumn('New_Col', when(ColA > 0 & ColB.isin(['B']) == False & ColC <= 0, col('ColA') + Col('ColR') + Col('ColP'))
...
...
这是最优化的方法还是有更好的代码方法?
感谢您的指导!
解决方案
您的代码符合需要,但条件应包含在括号内
from pyspark.sql import functions as F
(df
.withColumn('New_Col', F
.when((F.col('ColA') > 0) & (F.col('ColB').isin(['B']) == False) & (F.col('ColC') <= 0), F.col('ColA') + F.Col('ColR') + F.Col('ColP'))
)
)
推荐阅读
- excel - 如何找到通配符与VBA中至少一个字符匹配的文件夹名称
- javascript - 我应该做些什么来让它显示变量而不是值?
- laravel - 如何在点击时破坏 livewire 组件?
- pandas - 在 pandas 转换 lambda 函数中,如果最大为无穷大,则使用 if else 来获得第二大值
- haskell - quickCheck 命题逻辑生成器
- android - Android中不兼容的firebase库
- java - Sonarqube 问题 - 将此“尝试”更改为资源尝试。如何处理条件资源?
- arrays - 如何在swift 5中将所有元素从自定义对象收集到数组中
- javascript - 我的异步组件渲染了两次,并且期望即使使用 await 也不会等待第二次?
- node.js - MongoDB 排序/加权$或聚合查询