删除或标记,在pyspark中记录最大日期

rsl1atfo  于 2023-06-21  发布在  Spark
关注(0)|答案(1)|浏览(98)

我是一个新的数据砖,我试图摆脱重复的记录列“病人id”在DF使用“删除重复的方法。”
我想知道是否有一种方法可以根据time_stamp列(DF中的另一列)删除patient_id列中的重复记录。
因此,我基本上想要的是保留patient_idrd,它具有最大的时间戳,当Iop重复时,然后删除其余部分。
先谢谢你了

juud5qan

juud5qan1#

你需要使用窗口函数。您可以根据每个患者ID的降序日期定义row_number。然后过滤row_number = 1的记录,即,对于每个患者id,选择最大日期并仅过滤这些记录。

date = ['2022-10-16 17:00:00', '2022-10-16 18:00:00', '2022-10-16 21:00:00', '2022-10-16 22:00:00']
id = [1, 1, 2, 2]
df = spark.createDataFrame(list(zip(id, date)), ['id', 'dt'])

import pyspark.sql.functions as F 
from pyspark.sql.window import Window

df = sdf.withColumn("rn", F.row_number().over(
    Window.partitionBy("id").orderBy(col("dt").desc())
))
df.where("rn = 1").select("id","dt").show()

输出-

+---+-------------------+
| id|                 dt|
+---+-------------------+
|  1|2022-10-16 18:00:00|
|  2|2022-10-16 22:00:00|
+---+-------------------+

相关问题