对分组的数据日期时间列进行排名,并找出后续排名之间的差异

时间:2018-10-12 13:53:16

标签: python pyspark apache-spark-sql dense-rank

我有一个数据,其中包含有关产品名称和日期的分组列。我现在想对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)..等等之间的日期差。

0 个答案:

没有答案