簡體   English   中英

如何 select 基於日期時間列的 pySpark DataFrame 中的最后一個值

[英]How to select last value in a pySpark DataFrame based on a datetime column

我有一個 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

而且我必須 select 只有最近的一行 DataFrame 中名為 df_last 的每個 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)

我想知道是否有更簡單/更清潔的解決方案

這幾乎就是做到這一點的方法。 只是可以進行一些小的改進——不需要從行號中減去 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM