簡體   English   中英

如何使用窗口函數計算pyspark中的日期差異?

[英]How to calculate date difference in pyspark using window function?

嘗試計算自用戶首次開始使用應用程序以來經過的天數以及 df 行代表的事件。 下面的代碼 ( via ) 創建一個列,將行與前一行進行比較,但我需要將它與分區的第一行進行比較。

window = Window.partitionBy('userId').orderBy('dateTime')

df = df.withColumn("daysPassed", datediff(df.dateTime, 
                                lag(df.dateTime, 1).over(window)))

嘗試使用“int(Window.unboundedPreceding)”代替 1,這會引發錯誤。

我希望 daysPassed 列執行的操作示例:

 Row(userId='59', page='NextSong', datetime='2018-10-01', daysPassed=0),
 Row(userId='59', page='NextSong', datetime='2018-10-03', daysPassed=2),
 Row(userId='59', page='NextSong', datetime='2018-10-04', daysPassed=3)

所以,如果我做對了,基本上你想計算行中的日期與用戶的最小日期(開始日期)的差異,而不是lag()

from pyspark.sql import functions as func
window = Window.partitionBy('userId')

df_b = df_a.withColumn("daysPassed", func.datediff(df.dateTime, func.min(df.dateTime).over(window)))

這將計算從用戶啟動應用程序的第一個日期算起的天數。

暫無
暫無

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

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