这是我的数据框和过滤器:
df = spark.range(3)
filter1 = (F.col('id') == 1)
filter2 = (F.col('id') == 2)
flag = False
我要制作filter2
依赖 flag
.当flag = True
, 我要 filter2
生效和不生效flag = False
.我知道我能做到
filt = filter1
if flag:
filt = filt | filter2
df = df.filter(filt)
我想知道这是否可以在一行中实现,例如使用条件表达式/三元运算符等。这不起作用:
df = df.filter(filter1 | filter2 if flag else False)
flag = False
时的期望结果:+---+
| id|
+---+
| 1|
+---+
flag = True
时的期望结果:+---+
| id|
+---+
| 1|
| 2|
+---+
最佳答案
您可以使用 filter2
按位 &
flag
上的条件.这只会在 filter2
时返回 True和 flag
返回真否则假。将此与带或条件的 filter1 一起使用。
output = df.filter(filter1 |(filter2 & F.lit(flag)))
关于apache-spark - 添加条件过滤器子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69008401/