pma*_*a93 2 scala apache-spark
我正在使用 Scala 和 Spark。我想从 DataFrame 中过滤掉不满足我指定的所有条件的某些行,同时保留可能只满足其中一个条件的其他行。
例如:假设我有这个 DataFrame
+-------+----+
|country|date|
+-------+----+
| A| 1|
| A| 2|
| A| 3|
| B| 1|
| B| 2|
| B| 3|
+-------+----+
Run Code Online (Sandbox Code Playgroud)
并且我想过滤掉国家/地区A
和日期1
和2
,以便预期的输出应该是:
+-------+----+
|country|date|
+-------+----+
| A| 3|
| B| 1|
| B| 2|
| B| 3|
+-------+----+
Run Code Online (Sandbox Code Playgroud)
如您所见,我仍然B
使用日期1
和2
.
我尝试filter
按以下方式使用
df.filter("country != 'A' and date not in (1,2)")
Run Code Online (Sandbox Code Playgroud)
但是输出过滤掉了所有日期 1 和 2,这不是我想要的。
谢谢。
你现在的情况是
df.filter("country != 'A' and date not in (1,2)")
Run Code Online (Sandbox Code Playgroud)
可以翻译为“接受除A以外的任何国家,然后接受除1或2之外的任何日期”。您的条件是独立应用的
你想要的是:
df.filter("not (country = 'A' and date in (1,2))")
Run Code Online (Sandbox Code Playgroud)
即“查找国家 A 和日期为 1 或 2 的行,并拒绝它们”
或等效地:
df.filter("country != 'A' or date not in (1,2)")
Run Code Online (Sandbox Code Playgroud)
即“如果国家不是 A,那么无论日期如何都接受它。如果国家是 A,那么日期不能是 1 或 2”
见德摩根定律:
not(A or B) = not A and not B
not (A and B) = not A or not B
归档时间: |
|
查看次数: |
3751 次 |
最近记录: |