首页 > 解决方案 > 如何根据日期时间列选择 pySpark DataFrame 中的最后一个值

问题描述

我有一个结构如下的DataFrame df:

date_time           id   value
2020-12-06 17:00    A    10
2020-12-06 17:05    A    18
2020-12-06 17:00    B    20
2020-12-06 17:05    B    28
2020-12-06 17:00    C    30
2020-12-06 17:05    C    38

而且我必须只为名为 df_last 的 DataFrame 中的每个 id 选择最近的行。

这是一个有效的解决方案:

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

df_rows = df.withColumn('row_num', F.row_number().over(Window.partitionBy('id').orderBy(F.desc('date_time')))-1)
df_last = df_rows.filter(F.col('row_num')==0)

我想知道是否有更简单/更清洁的解决方案

标签: apache-sparkpysparkapache-spark-sql

解决方案


这几乎就是这样做的方法。只需进行一些小的改进 - 无需从行号中减去 1:

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

df_rows = df.withColumn(
    'row_num', 
    F.row_number().over(Window.partitionBy('id').orderBy(F.desc('date_time')))
)
df_last = df_rows.filter('row_num = 1')

推荐阅读