从日期范围中删除几个日期
Posted
技术标签:
【中文标题】从日期范围中删除几个日期【英文标题】:remove few dates from date range 【发布时间】:2019-12-13 22:39:54 【问题描述】:from datetime import timedelta, date
def daterange(date1, date2):
for n in range(int ((date2 - date1).days)+1):
yield date1 + timedelta(n)
start_dt = date(2015, 12, 20)
end_dt = date(2016, 1, 11)
for dt in daterange(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))
我有如上所述的日期范围,但在这个日期范围内我几乎没有可以忽略的日期。这些日期在数据框中。
如何从这个日期范围中取出这些日期?任何人请建议。具有不同日期的数据框如下。
Pardata = spark.read.parquet("/mnt/Test/data.parquet")
Pardata.createOrReplaceTempView("parfile")
ParRes = spark.sql("SELECT distinct date FROM parfile ")
【问题讨论】:
只是一个建议:尝试使用普通的 Python 结构来执行此操作。这对 Pyspark 来说不是一个好的用例。我们在谈论多少个日期?从公元第一年到现在,我们仍然在讨论 ± 740k 日期,这可以通过标准 Python 有效处理。 【参考方案1】:使用left_anti
加入:
dates = [[dt.strftime("%Y-%m-%d")] for dt in daterange(start_dt, end_dt)]
dates_df = spark.createDataFrame(dates, ["date"])
dates_df.join(ParRes, dates_df("date") === ParRes("date"), "left_anti").show()
首先,根据该日期范围创建一个 DataFrame dates_df
。然后使用left_anti
join,根据date
这个key,过滤掉dates_df
Dataframe中ParRes
Dataframe中的日期。
【讨论】:
以上是关于从日期范围中删除几个日期的主要内容,如果未能解决你的问题,请参考以下文章