Python 读取包含最近21天的文件名

Python 读取包含最近21天的文件名,python,pyspark,wildcard,databricks,Python,Pyspark,Wildcard,Databricks,我在Microsoft Azure Storage Explorer中有一个拼花地板文件名 文件名如下所示: dataset_2019_11_19-19.parquet dataset_2020_01_19-20.parquet dataset_2020_01_20-20.parquet dataset_2020_01_21-20.parquet dataset_2020_01_22-20.parquet 如果我想读取2020年的所有数据,我会这样做,我使用通配符获取2020年后的任何数据:

我在Microsoft Azure Storage Explorer中有一个拼花地板文件名

文件名如下所示:

dataset_2019_11_19-19.parquet
dataset_2020_01_19-20.parquet
dataset_2020_01_20-20.parquet
dataset_2020_01_21-20.parquet
dataset_2020_01_22-20.parquet
如果我想读取2020年的所有数据,我会这样做,我使用通配符获取2020年后的任何数据:

datapath_v3_indata_imptp = "wasbs://mydata@mine.blob.core.windows.net/first_folder/dataset_2020*"
df_indata_v3_imptp=spark.read.format("parquet").option("header", "true").load(datapath_v3_indata_imptp)

如何仅获取最后21天的数据?

使用
输入文件名()
函数从文件名中提取日期,然后
拆分
+
regexp\u提取
(仅获取日期)最后,
到日期
yyyy-MM-dd
格式创建日期

  • 要筛选,请使用
    date\u sub(current\u date(),21)
    函数获取前21天的日期

示例:

from pyspark.sql.functions import *
#reading directory 
spark.read.parquet("wasbs://mydata@mine.blob.core.windows.net/first_folder/").\
withColumn("date",\
    to_date(\
        regexp_extract(\
            split(input_file_name(),"-")[0]\
            ,"_(.*)",1),\
        "yyyy_MM_dd")).\
filter(col("date") > date_sub(current_date(),21)).\
show(10,False)

有三种可能的方法:1)为每个文件名提取日期,并使用
datetime
模块解析它们,然后检查它们是否大于
datetime.datetime.now()-datetime.timedelta(days=21)
;2) 生成过去21天的日期(也使用
datetime
模块),将其转换为字符串,并仅选择包含这些字符串的文件名;3) 只需在21天前创建日期:
(datetime.datetime.now()-datetime.timedelta(days=21)).date().isoformat()
,然后比较文件名-对于ISO日期格式,更大的字符串表示更晚的日期。谢谢!它目前的日期格式不正确,所以我需要修改它。抱歉,我对Python非常陌生,所以仍在学习您可以使用
(datetime.datetime.now()-datetime.timedelta(days=21)).date().strftime(“%Y\u%m\u%d”)
以YYYY\u MM\u DD格式获取日期,就像在文件名中一样。您能否提供一个可复制的解决方案,以便我可以测试一下?这真是太棒了,只是对Python来说非常陌生,甚至不知道您建议的代码放在哪里。谢谢