嗨,我有一列的日期超出了该列,我需要在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|
+---+----------+----------+-------------+