Python 读取包含最近21天的文件名
我在Microsoft Azure Storage Explorer中有一个拼花地板文件名 文件名如下所示: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年后的任何数据:
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
格式创建日期
- 要筛选,请使用
函数获取前21天的日期date\u sub(current\u date(),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来说非常陌生,甚至不知道您建议的代码放在哪里。谢谢