我在定期发送给我的文件中拥有如下所示的数据
2018-11-06 00 46 3574
2018-11-06 01 21 1667
2018-11-06 02 22 1650
我经常在后续文件中得到重复的文件,并使用类似的方法处理这些文件:
df2=df.dropDuplicates()
我的问题是,有时我会得到一个与前两列重复的值,但第三和第四列是不同的。因此,在两个不同的文件中,我可能会得到:
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
我不知道该怎么做。感觉我需要利用一个窗口,但我不知道该怎么做。
答案 0 :(得分:2)
最简单的方法是使用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")