计算每月未结案件数

时间:2019-10-18 09:00:23

标签: python pyspark

我目前正在努力解决一个问题,即在pyspark月末计算未完成任务的数量。我有一个带有两个时间戳的数据框(一个用于发布问题,一个用于发布问题)。我想计算月底未解决的问题。

我的数据帧df1是两个时间戳表(任务开始和结束的时间戳)的合并。假设它看起来如下:

TaskNumber  Start Date   StartTimestamp    EndDate     EndTimestamp  EndOfTheMonth        
1           2/15/2019    Start             4/18/2019   End           2/28/2019                            
2           2/16/2019    Start             2/23/2019   End           2/28/2019                             
3           2/17/2019    Start             3/4/2019    End           2/28/2019                             
4           3/1/2019     Start             Null        Null          3/31/2019                            

from pyspark.sql.functions import col, when, sum as _sum
from pyspark.sql import functions as F

    df2 = df1.withColumn("EndOfTheMonth", last_day("Start Date"))

    df3 = (df2.withColumn("OpenTaskAtMonthEnd", when((col("Start Date") <= col("EndOfTheMonth")) & ((col("End Date") >= col("EndOfTheMonth")) | 
(col("EndTask").isNull())),1).otherwise(0))

             .withColumn("TaskStillOpened", when((col("EndTimestamp").isNull()),1).otherwise(0))
             .withColumn("DateofToday", F.current_date())
          )

    df4 = df3.filter(col("OpenTaskAtMonthEnd") == 1)
             .withColumn("Pending Days", when(col("TaskStillOpened") == 1, F.datediff(F.to_date(df3.DateofToday), F.to_date(df3.Start Date))).otherwise(F.datediff(F.to_date(df3.End Date), F.to_date(df3.Start Date))))


    dfOpen = (df4.groupBy("EndOfTheMonth")
             .agg(_sum(col("OpenTaskAtMonthEnd").alias("NrTotalOpenTasksAtMonthEnd"), _sum(col(TasksStillOpened)).alias("TotalWorkinProgress"))
             )


TaskNumber        Start Date    End Date     EndOfTheMonth    OpenTaskatMonthEnd    TaskStillOpen
1                 2/15/2019     4/18/2019    2/28/2019        1                     0
2                 2/16/2019     2/23/2019    2/28/2019        0                     0
3                 2/17/2019     3/4/2019     2/28/2019        1                     0
4                 3/1/2019      Null         3/31/2019        1                     1

在第n个月中开始执行的那些开放任务中,我设法对其进行计数。但是当某个任务在第n-1个月开始并且仅在第n + 1个月结束时,我无法在第n个月的打开任务中用我的实际代码找到它。

预期的输出确实是每个月(最好是每周)获得未完成任务的数量。

非常感谢您的支持;)

0 个答案:

没有答案