apache-spark - 添加条件过滤器子句

标签 apache-spark pyspark apache-spark-sql conditional-operator

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

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/

相关文章:

python - 在 pyspark 中读取 csv 时,SQLContext 对象没有读取属性

scala - Spark UDAF - 使用泛型作为输入类型?

python - Pyspark py4j PickleException : "expected zero arguments for construction of ClassDict"

apache-spark - 使用 Spark 的 partitionBy 方法对 S3 中的大型倾斜数据集进行分区

performance - spark 检查点是否比缓存更快?

scala - 在spark中导入TSV文件

java - java.1.8 中是否有像 scala 中那样在 Map 中传递/存储函数引用?

elasticsearch - Elasticsearch 和星火 : Updating existing entities

ruby - 长时间运行的 ETL 过程 - 后台作业、Spark、Hadoop

sql - 在pyspark中实现MERGE INTO sql