我有一个数据,其中包含有关产品名称和日期的分组列。我现在想对datetime的product_purchased列进行排名。然后在随后的等级之间进行减法以获得日期差,并在减法值列上进行汇总。
Prod Name Hour
A 20
B 13
C 17
A 20
B 12
按df分组后的样子
Prod Name Hour Count
A 20 2
B 13 1
C 17 1
B 12 1
aggs_date = load.groupBy(“ product_name”,“ hour”)。agg((count(“ *”)。alias(“ cnt”)),(F.rank('date_logged')。alias('rank '))
load.select('date_logged').show(20,False)
+---------------------------+
|date_logged |
+---------------------------+
|2018-06-12 05:38:00.0000000|
|2018-08-20 17:15:00.0000000|
|2018-08-20 20:40:00.0000000|
|2018-08-14 06:39:00.0000000|
|2018-06-23 06:32:00.0000000|
|2018-05-22 09:33:00.0000000|
我想要的是,这些组应该具有一个等级,然后应该用先前的等级(等级1-等级2)减去product_purchased列,并给出天数差。以及差异列上的进一步聚合。
解决此问题的方法是什么?
ranked = load.withColumn("rank", dense_rank().over(Window.partitionBy("product_name").orderBy(desc("product_purchased"))))
grouped = ranked.groupBy("hour", "product_name").agg(F.collect_list(F.struct("rank")).alias("tmp"))
它看起来像:
grouped.show()
+----+------------------------+--------------------+
|hour|primary_application_name| tmp|
+----+------------------------+--------------------+
| 0| E-RE |[[10], [238], [23...|
| 0| ACQU... |[[55], [71], [72]...|
| 0| MOBILE MESSA... | [[2]]|
| 0| JADE|[[21], [75], [134...|
| 0| p2 | [[114], [174]]|
| 1| ACQU... |[[18], [19], [54]...|
| 1| MOBILE MESSA... | [[3]]|
| 1| JADE|[[19], [20], [74]...|
| 2| E-RE |[[6], [236], [236...|
| 2| DATA ACQU... |[[265], [305], [7...|
| 2| JADE|[[42], [66], [73]...|
| 2| LM RAT... | [[3]]|
| 3| VULNERAB... |[[42], [52], [65]...|
| 3| WE... | [[3]]|
我想找到等级(238-10),(239-238)..等等之间的日期差。