pyspark 如何分区并在Spark框架中只获取最新记录

gblwokeq  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(148)

我有一个Spark框架DF

vehicle_coalesce  vehicleNumber  productionNumber pin  checkDate
V123              V123           P123             null 27/08/2023 01:03
P123              null           P123             W123 27/08/2023 01:05
P123              null           P123             W123 27/08/2023 01:05
V234              V234           P234             null 27/08/2023 01:03
V234              V234           null             W234 27/08/2023 01:05
V234              V234           null             W234 27/08/2023 01:05
P456              null           P456             W456 27/08/2023 01:03
v456              V456           null             W456 27/08/2023 01:05
V456              V456           P456             W456 27/08/2023 01:05

我必须按vehicleNumber或productionNumber或pin分组,并按vehicleNumber或productionNumber of pin分区,并根据最新检查日期仅选择最新记录
所需输出为:

vehicle_coalesce  vehicleNumber  productionNumber pin  checkDate
P123              null           P123             W123 27/08/2023 01:05
P123              null           P123             W123 27/08/2023 01:05
V234              V234           null             W234 27/08/2023 01:05
V234              V234           null             W234 27/08/2023 01:05
v456              V456           null             W456 27/08/2023 01:05
V456              V456           P456             W456 27/08/2023 01:05

这里,由于V123车辆具有相同的productionNumber,因此它按其分组并拾取最新记录,对于V234,由于它具有相同的vehicleNumber,因此它按其分组并拾取最新记录,对于V456,由于它具有相同的pin,因此它按其分组并拾取最新记录
如何使用pyspark

lc8prwob

lc8prwob1#

我会使用groupBy并在最大checkDate上进行聚合

from pyspark.sql import functions as F

ts_join = (
    df
    .groupby('productionNumber')
    .agg(F.max('checkDate').alias('checkDate'))
    .select('productionNumber', 'checkDate')
)

df.join(ts_join, on=['productionNumber', 'checkDate'])

相关问题