首页 > 解决方案 > 添加条件过滤子句

问题描述

这是我的数据框和过滤器:

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|
+---+

标签: apache-sparkpysparkapache-spark-sqlconditional-operator

解决方案


您可以filter2&. flag只有当filter2和都flag返回 True 否则返回 False 时才返回 True。将此与带有 or 条件的 filter1 一起使用。

output = df.filter(filter1 |(filter2 & F.lit(flag)))

推荐阅读