apache-spark - 添加条件过滤子句
问题描述
这是我的数据框和过滤器:
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
和都flag
返回 True 否则返回 False 时才返回 True。将此与带有 or 条件的 filter1 一起使用。
output = df.filter(filter1 |(filter2 & F.lit(flag)))
推荐阅读
- c# - C# 结构文档:构造函数初始化器与 `ref` 和 `out` 参数的关系
- typescript - 打字稿:帮助定义数组数组的类型?
- laravel - 如何在 Laravel 中使用 hasMany 关系排除预定槽?
- laravel - 为什么 php artisan serve 有效且 http://localhost/etc = error 500
- javascript - 在 NODeJS 中的 TCP 套接字上将十六进制字节转换为十进制
- flutter - 缺少 KeyStore Flutter,找不到键盘映射“windows 正确重做”
- php - 在 PHP 问题中从谷歌驱动器读取电子表格
- javascript - npm 开始不工作 | 不加载反应应用程序
- typescript - 找不到模块“...”或其相应的类型声明。(NextJS + TypeScript)
- php - geoNames api 返回 SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列的意外字符