Apache spark 如何在spark dataframe中获取以下输入数据集的最大关闭日期和状态?
我有一个低于火花的数据框,我需要检查作业是否关闭。每个作业都可以有子作业,一旦所有子作业都关闭,则认为作业已关闭。 请您建议如何在pyspark中实现这一点 例如:输入dfApache 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
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|
+------+-----------+------------+