根据日期值获取最新记录的另一种方法

时间:2020-10-11 16:56:30

标签: python dataframe pyspark hive pyspark-dataframes

我有一个输入日期,但如下所示:df_inp

customer_id  |ph_num|date      |
1            |123   |2020-10-01|
2            |456   |2020-10-01|
3            |789   |2020-10-01|
1            |654   |2020-10-02|
2            |543   |2020-10-03|
1            |908   |2020-10-04|
4            |123   |2020-10-02|

我需要获取每个日常流程的最新记录。因此,我尝试使用Windows rank()操作,它可以正常工作。但是,由于要输入数百万个数据以优化性能,因此我们可以使用任何其他spark操作来基于customer_id和按日期值订购来获取最新数据。

window_func = Window.partition_by("customer_id ").orderBy("date")
df = df.withColumn("rank", rank().over(window_func))
df = df.filter(df.rank == "1")

在这里,customer_id-字符串和日期-时间戳记

1 个答案:

答案 0 :(得分:1)

对于Spark 3.0+,可能值得检查max_by(或min_by,如果您将问题排在第1位)是否具有比window + {{ 1}}方法。

filter

结果与问题相同。比较两种方法的执行计划,df.groupBy("customer_id").agg(F.expr("max_by(ph_num,date)"), F.max(F.col("date"))) 的转换较少(max_by),但是两种方法都会触发一次交换。

相关问题