首页 > 解决方案 > 如何从包含镶木地板文件的文件夹中读取过去 3 天的数据?

问题描述

我有一个包含许多拼花文件的文件夹,其名称如下:

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?是否可以使用某种掩码来仅选择属于过去 3 天的那些文件名而不是读取整个文件夹?

标签: scalaapache-sparkapache-spark-sqlparquet

解决方案


您可以读取所有文件名和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: _*)

如果需要附加路径。

希望这可以帮助!


推荐阅读