我正在處理的資料集樣本:
data = [(1, "2021-11-08"), (1, "2021-11-06"), (1, "2021-10-08"), (2, "2021-11-01"), (2, "2021-10-20"),
(2, "2021-08-05"), (3, "2021-08-02"), (3, "2021-05-08"), (3, "2021-03-01")]
df = spark.createDataFrame(data=data,schema=columns)

我想取客戶最近的購買(客戶的 date.max())和之前的最大購買量(倒數第二次購買),并取兩者之間的差額(我假設所有購買的產品都是相同的)。我仍然沒有在 pyspark 中找到這樣做的東西。我的想法的一個示例是在 groupby 中執行此操作,例如下面的最小日期和最大日期。
df1 = df.withColumn('data',to_date(df.data))
dados_agrupados_item = df1.groupBy(["cliente"]).agg(max("data"), \
min("data"), \
)
輸出是:

對于我的問題,輸出將是該客戶的最大日期和倒數第二個購買日期。輸出應該是:

另一種方法也可以直接傳遞這兩個日期之間的差異。但我不知道如何實作它。
非常感謝您提前。
uj5u.com熱心網友回復:
使用 group by 和 collect_list 收集每個組的所有日期
使用 reverse/array_sort 強制執行陣列的降序。
參考第一次和第二次購買。(我們希望他們已經購買了兩次,否則我們需要更復雜的邏輯來處理它。)
df1.groupBy(["Client"])\
.agg(
reverse( # collect all the dates in an array in descending order from most recent to oldest.
array_sort(
collect_list( df1.data ))).alias("dates") )\
.select(
col("Client"),
col("dates")[0].alias("last_purchase"), # get last purchase
col("dates")[1].alias("penultimate") )\ #get last purchase 1
.show()
------ ------------- -----------
|Client|last_purchase|penultimate|
------ ------------- -----------
| 1| 2021-11-08| 2021-11-06|
| 3| 2021-08-02| 2021-05-08|
| 2| 2021-11-01| 2021-10-20|
------ ------------- -----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/483923.html
標籤:Python 约会时间 pyspark 通过...分组
上一篇:索引在datetime64[ns]但仍然得到TypeError:OnlyvalidwithDatetimeIndex
