gpt4 book ai didi

scala - 从 Spark DataFrame 中删除仅满足两个条件的行

转载 作者:行者123 更新时间:2023-12-02 03:22:40 29 4
gpt4 key购买 nike

我正在使用 Scala 和 Spark。我想从 DataFrame 中过滤掉不满足我指定的所有条件的某些行,同时保留可能仅满足其中一个条件的其他行。

例如:假设我有这个 DataFrame

+-------+----+
|country|date|
+-------+----+
| A| 1|
| A| 2|
| A| 3|
| B| 1|
| B| 2|
| B| 3|
+-------+----+

我想过滤掉国家A和日期12,这样预期的输出应该是:

+-------+----+
|country|date|
+-------+----+
| A| 3|
| B| 1|
| B| 2|
| B| 3|
+-------+----+

如您所见,我仍然保留国家/地区 B 的日期为 12

我尝试按以下方式使用过滤器

df.filter("country != 'A' and date not in (1,2)")

但是输出过滤掉了所有日期 1 和 2,这不是我想要的。

谢谢。

最佳答案

您目前的状况是

df.filter("country != 'A' and date not in (1,2)")

可以翻译为“接受 A 以外的任何国家,然后接受除 1 或 2 之外的任何日期”。您的条件是独立应用的

你想要的是:

df.filter("not (country = 'A' and date in (1,2))")

即“查找国家为 A、日期为 1 或 2 的行,并拒绝它们”

或等效的:

df.filter("country != 'A' or date not in (1,2)")

即“如果国家/地区不是 A,则无论日期如何都接受它。如果国家/地区是 A,则日期不得为 1 或 2”

参见De Morgan's laws :

not(A or B) = not A and not B

not (A and B) = not A or not B

关于scala - 从 Spark DataFrame 中删除仅满足两个条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54329970/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com