从 PySpark 数据框中删除值只出现一次的行

Remove rows from PySpark dataframe where value only appears once

有一个与此问题非常相似的问题

我的 Dataframe 如下所示:

ID    Month   Metric1    Metric2
1       01       4          3
3       01       4          2
3       01       3          1      
1       02       3          2
1       02       1          5
2       02       6          3
2       02       7          2
3       03       5          6

我想先按月分组,再按ID分组(对于droping,结果不应该分组)。最后,我想删除所有 id 或 month 只出现一次的行。

ID    Month   Metric1    Metric2
-       --       -          -
3       01       4          2
3       01       3          1      
1       02       3          2
1       02       1          5
2       02       6          3
2       02       7          2
-       --       -          -

与我上面链接的问题相同的问题,仅在 PySpark 中并且有两个分组...

我一直在尝试将 pandas 命令转换为 pyspark,但我不知道如何替换 [],因为 pyspark 似乎不认识它们...

df2 = df[df.groupBy("ID", "Month")].ID.count("ID") >1]

此外,我尝试了 window 功能。但他们总是最终需要 am 聚合函数,而我不希望数据被聚合:

from pyspark.sql.window import Window as W
window = W.partitionBy("Month").orderBy("ID")
df.withColumn("ID",Moth.over(window)) \
    .show()

如有任何帮助,我们将不胜感激!

获取按 Id 和月份划分的计数并消除计数为 1 的行:

from pyspark.sql import functions as F, Window as W

w = W.partitionBy("ID","Month").orderBy("Month")
out = df.withColumn("C",F.count("ID").over(w)).filter("C!=1").drop("C")