如何从带有镶木地板文件的文件夹中读取过去3天的数据?

时间:2018-05-15 12:14:22

标签: scala apache-spark apache-spark-sql parquet

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

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天的文件名而不是读取整个文件夹?

1 个答案:

答案 0 :(得分:1)

您可以阅读所有文件名和filter 3天内的文件。

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: _*)

如果需要附加路径。

希望这有帮助!