在pyspark中获取介于最大日期和最小日期之间的丢失日期



嗨,我有一列的日期超出了该列,我需要在pyspark中的答案中生成最大和最小日期之间的缺失值,其中不包括最大和最小数据?

提前感谢

您可以使用sequence来完成此操作,而且可以在sequence返回列表时分解为中间行

数据准备

s = StringIO("""
id,min_date,max_date
abc,2022-07-01,2022-07-15
"""
)
df = pd.read_csv(s,delimiter=',')
sparkDF = sql.createDataFrame(df)
.withColumn('min_date'
,F.to_date(F.col('min_date')                   
,'yyyy-MM-dd'
)
).withColumn('max_date'
,F.to_date(F.col('max_date')                   
,'yyyy-MM-dd'
)
)
sparkDF.show()
+---+----------+----------+
| id|  min_date|  max_date|
+---+----------+----------+
|abc|2022-07-01|2022-07-15|
+---+----------+----------+

顺序和分解

sparkDF = sparkDF.withColumn('missing_dates',F.explode(
F.expr("sequence(min_date + 1,max_date - 1,interval 1 day)")
)
)
sparkDF.show()
+---+----------+----------+-------------+
| id|  min_date|  max_date|missing_dates|
+---+----------+----------+-------------+
|abc|2022-07-01|2022-07-15|   2022-07-02|
|abc|2022-07-01|2022-07-15|   2022-07-03|
|abc|2022-07-01|2022-07-15|   2022-07-04|
|abc|2022-07-01|2022-07-15|   2022-07-05|
|abc|2022-07-01|2022-07-15|   2022-07-06|
|abc|2022-07-01|2022-07-15|   2022-07-07|
|abc|2022-07-01|2022-07-15|   2022-07-08|
|abc|2022-07-01|2022-07-15|   2022-07-09|
|abc|2022-07-01|2022-07-15|   2022-07-10|
|abc|2022-07-01|2022-07-15|   2022-07-11|
|abc|2022-07-01|2022-07-15|   2022-07-12|
|abc|2022-07-01|2022-07-15|   2022-07-13|
|abc|2022-07-01|2022-07-15|   2022-07-14|
+---+----------+----------+-------------+

相关内容

  • 没有找到相关文章

最新更新