从日期范围中删除一些日期

时间:2019-12-13 22:39:54

标签: pandas dataframe pyspark pyspark-sql pyspark-dataframes

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  ")

1 个答案:

答案 0 :(得分: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联接,该联接根据键ParResdates_df数据框中的date数据框中过滤出日期。