我有一个包含许多镶木地板文件的文件夹,其名称如下:
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天的文件名而不是读取整个文件夹?
答案 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: _*)
如果需要附加路径。
希望这有帮助!