Apache spark 如何在spark dataframe中获取以下输入数据集的最大关闭日期和状态?

Apache spark 如何在spark dataframe中获取以下输入数据集的最大关闭日期和状态?,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有一个低于火花的数据框,我需要检查作业是否关闭。每个作业都可以有子作业,一旦所有子作业都关闭,则认为作业已关闭。 请您建议如何在pyspark中实现这一点 例如:输入df JobNum CloseDt ClosedFlg 12 N 12-01 2012-01-01 Y 12-02 2012-02-01 Y 13 2013-01-01 Y 14 14-01 2015-01-02 Y 1

我有一个低于火花的数据框,我需要检查作业是否关闭。每个作业都可以有子作业,一旦所有子作业都关闭,则认为作业已关闭。 请您建议如何在pyspark中实现这一点

例如:输入df

JobNum   CloseDt      ClosedFlg
12                    N
12-01    2012-01-01   Y
12-02    2012-02-01   Y
13       2013-01-01   Y
14       
14-01    2015-01-02   Y
14-02                 N
输出_df:

JobNum    IsClosedFlg   Max_ClosedDt
12        Y             2012-02-01
13        Y             2013-01-01
14        N        

您可以分配一个按jobnum分区并按sub jobnum降序排列的行号,并过滤行号为1的行

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'rn', 
    F.row_number().over(
        Window.partitionBy(F.split('JobNum', '-')[0])
              .orderBy(F.split('JobNum', '-')[1].desc())
    )
).filter('rn = 1').select(
    F.split('JobNum', '-')[0].alias('JobNum'), 
    F.col('ClosedFlg').alias('IsClosedFlg'), 
    F.col('CloseDt').alias('Max_ClosedDt')
)

df2.show()
+------+-----------+------------+
|JobNum|IsClosedFlg|Max_ClosedDt|
+------+-----------+------------+
|    12|          Y|  2012-02-01|
|    13|          Y|  2013-01-01|
|    14|          N|        null|
+------+-----------+------------+