如何从包含镶木地板文件的文件夹中读取最近 3 天的数据?

How to read the data of the last 3 days from a folder with parquet files?

我有一个包含许多镶木地板文件的文件夹,这些文件的名称如下:

user_2018-03-15_checked_products.parquet
user_2018-03-15_unchecked_products.parquet
user_2018-03-14_checked_products.parquet
user_2018-03-14_unchecked_products.parquet
user_2018-03-13_checked_products.parquet
user_2018-03-13_unchecked_products.parquet
user_2018-03-12_checked_products.parquet
user_2018-03-12_unchecked_products.parquet

我阅读所有文件如下:

val df = spark.read.parquet("path/to/folder")

该文件夹包含 100 Gb 的数据,并且其大小正在逐渐增加。但我只需要读取最近 3 天的数据。目前,我阅读了整个文件夹,然后应用 filter?是否可以使用某种掩码以便 select 仅 select 那些属于最近 3 天的文件名而不是读取整个文件夹?

您可以读取所有文件名和filter3天内的文件作为。

val listOfFiles = ??? // read all the files names 

val filteredFile = listOfFiles.filter( file => {
  val dateFormat = new SimpleDateFormat("yyyy-MM-dd")
  val fileDate =  dateFormat.parse(file.split("_")(1))  //get date from file name 
  val currentDate = dateFormat.parse(dateFormat.format(new Date())) // current date
  val days = Days.daysBetween(new LocalDateTime(fileDate), new LocalDateTime(currentDate)).getDays
  //difference in days

  if (days <= 3 && days >= 0) true else false
})

现在读取筛选文件列表为

spark.read.parquet(filteredFile: _*)

如果需要附加路径。

希望对您有所帮助!