Pyspark基于其他值的比较删除具有匹配值的行

2024-09-27 07:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有像你在下面看到的文件,定期交付给我的数据

2018-11-06 00        46      3574                                             
2018-11-06 01        21      1667                                             
2018-11-06 02        22      1650 

我经常在随后的文件中得到重复的文件,我用如下方法处理这些文件:

df2=df.dropDuplicates()

我的问题是,有时我会得到一个值,它是前2列的副本,但第3列和第4列是不同的。所以在两个不同的文件中我可能会得到:

FILE 1
2018-11-06 01        21      1667 

FILE 2
2018-11-06 01        23      1682

然后我的数据帧看起来像这样:

2018-11-06 00        46      3574
2018-11-06 01        21      1667
2018-11-06 01        23      1682
2018-11-06 02        22      1650

当这种情况发生时,我希望前2列的值是唯一的,我希望通过将值最高的行保留在第4列来实现这一点。所以我希望我的数据在我完成时是这样的:

2018-11-06 00        46      3574
2018-11-06 01        23      1682
2018-11-06 02        22      1650

我不知道怎么做。感觉我需要利用一个窗口,但我不知道怎么做。你知道吗


Tags: 文件数据方法利用df副本情况file
1条回答
网友
1楼 · 发布于 2024-09-27 07:31:50

实现这一点最直接的方法是使用rank()。我还没有测试它,但下面是一些主要的功能代码,它应该让你95%的方式。你知道吗

from pyspark.sql import Window
from pyspark.sql.functions import desc, rank

# The ranking ordering is by col4 descending, then col3 descending as a tiebreaker.
rank_window = Window.partitionBy("col1", "col2").orderBy(desc("col4"), desc("col3"))
df.withColumn("rank", rank().over(rank_window)).filter("rank=1")

相关问题 更多 >

    热门问题