PySpark过滤条件



我有两个过滤器,其中一个过滤器检查精确匹配&将收集该项,第二个过滤器将查找两个不同的匹配项。如果第一个过滤器为真,第二个过滤器应该覆盖第一个过滤器。

过滤器1示例:

df = df_vals.where(F.col("x" == 1a)).select()

过滤器2示例:

df = df_vals.where(F.col("x" == 1a | "x" == 2b ) | f.col("x" == 1a | F.col("x" == 2c)).select(items in list)

所以我需要关于如何覆盖第一个过滤器的建议,如果第二个过滤器在PySpark中也是true。理想情况下,只有当第二个过滤器不为真时,第一个过滤器才会通过。

对于特定列的特定行,如果x已经具有1a的值,那么它不能是2b,因为它被分配给1a是对的吗?你确定要在第二个过滤器中使用or吗?如果是这种情况,Filter 1被认为是在Filter 2,因为你总是寻找1a…你能更新你的问题以包含期望的输出吗?使用模拟数据是可以的。

样本dataframe……我添加了y列作为稍后过滤器的参考。

+---+---+
|  x|  y|
+---+---+
| 1a|  1|
| 1a|  2|
| 2b|  3|
| 2c|  4|
| 2b|  5|
| 1a|  6|
| 1a|  7|
| zz|  8| // to be ignored
| zz|  9| // to be ignored
| zz| 10| // to be ignored
| zz| 11| // to be ignored
+---+---+

下面应用滤镜
df.where(
((F.col('x') == '1a') | (F.col('x') == '2b')) | 
((F.col('x') == '1a') | ((F.col('x') == '2c')))) 
.show()

将给你这个结果,x列中具有zz值的行将根据上面的过滤器被忽略。

+---+---+
|  x|  y|
+---+---+
| 1a|  1|
| 1a|  2|
| 2b|  3|
| 2c|  4|
| 2b|  5|
| 1a|  6|
| 1a|  7|
+---+---+

相关内容

  • 没有找到相关文章

最新更新