我在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天的数据?
使用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)