scala - 如何从包含镶木地板文件的文件夹中读取过去 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 天的那些文件名而不是读取整个文件夹?
解决方案
您可以读取所有文件名和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: _*)
如果需要附加路径。
希望这可以帮助!
推荐阅读
- reactjs - React 应用程序之间的通信
- php - 在 foreach 循环中插入数据库,同时仍按顺序调用不同的函数
- c# - 询问 WebService 时出现异常
- c# - 关于使用 Protractor 和 C# 的 Angular 5 自动化
- java - 下载损坏的大视频文件
- c - 在 C 处的二叉搜索树中插入新节点
- python - GitLab CI 的单元测试覆盖率
- python - 在返回最后一次迭代的for循环中生成字典
- intellij-idea - 仅将 IntelliJ 限制为仅检查当前文件
- python - test_ssl.py 和 test_urllib2.py 测试在 python2.7 中失败