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

问题描述 投票:0回答:1

我在Microsoft Azure存储资源管理器中有一个镶木地板文件名。

文件名看起来像这样:

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://[email protected]/first_folder/dataset_2020*"
df_indata_v3_imptp=spark.read.format("parquet").option("header", "true").load(datapath_v3_indata_imptp)

我将如何仅获得最近21天的数据?

python pyspark wildcard databricks
1个回答
0
投票

使用input_file_name()函数从文件名中提取日期,然后使用split + regexp_extract(仅获取日期),最后使用to_date创建日期格式为yyyy-MM-dd

  • 要过滤,请使用date_sub(current_date(),21)函数获取21天之前的日期。

Example:

from pyspark.sql.functions import *
#reading directory 
spark.read.parquet("wasbs://[email protected]/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)
© www.soinside.com 2019 - 2024. All rights reserved.