如何从包含镶木地板文件的文件夹中读取最近 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 天的文件名而不是读取整个文件夹?
您可以读取所有文件名和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: _*)
如果需要附加路径。
希望对您有所帮助!
我有一个包含许多镶木地板文件的文件夹,这些文件的名称如下:
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 天的文件名而不是读取整个文件夹?
您可以读取所有文件名和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: _*)
如果需要附加路径。
希望对您有所帮助!