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

wlp8pajw  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(295)

我有一个低于SparkDataframe,我需要检查工作是否关闭。每个作业都可以有子作业,一旦所有子作业都关闭,则认为一个作业已关闭。请你能建议如何在Pypark实现这一点。
例如:输入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

输出功率因数:

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

piztneat1#

您可以指定一个按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|
+------+-----------+------------+

相关问题