代码之家  ›  专栏  ›  技术社区  ›  nak5120

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

  •  0
  • nak5120  · 技术社区  · 5 年前

    我在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://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天的数据?

    0 回复  |  直到 5 年前
        1
  •  2
  •   notNull    5 年前

    使用从文件名中提取日期 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://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)