首页 > 解决方案 > 按创建日期获取不同的行

问题描述

我正在使用这样的数据框:

DeviceNumber        | CreationDate       | Name
1001                | 1.1.2018           | Testdevice
1001                | 30.06.2019         | Device
1002                | 1.1.2019           | Lamp

我正在使用 databricks 和 pyspark 来执行 ETL 过程。如何以每个“DeviceNumber”只有一行并且这将是“CreationDate”最高的行的方式减少数据帧?在此示例中,我希望结果如下所示:

DeviceNumber        | CreationDate       | Name
1001                | 30.06.2019         | Device
1002                | 1.1.2019           | Lamp

标签: dataframepysparkdatabricks

解决方案


您可以使用 DeviceNumber 创建一个额外的数据框,它是最新/最大 CreationDate。

import pyspark.sql.functions as psf

max_df = df\
    .groupBy('DeviceNumber')\
    .agg(psf.max('CreationDate').alias('max_CreationDate'))

然后加入max_df 原始数据框。

joining_condition = [ df.DeviceNumber == max_df.DeviceNumber, df.CreationDate == max_df.max_CreationDate ]

df.join(max_df,joining_condition,'left_semi').show()

left_semi当您希望第二个数据帧作为查找并且确实需要来自第二个数据帧的任何列时,join 很有用。


推荐阅读