Как прочитать данные за последние 3 дня из папки с паркетными файлами? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть папка с множеством паркетных файлов, имена которых следующие:

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 ГБ данных, и ее размер постепенно увеличивается. Но мне нужно читать только данные за последние 3 дня. В настоящее время я прочитал всю папку, а затем применить filter? Можно ли использовать какую-то маску для выбора только тех имен файлов, которые относятся к последним 3 дням, вместо чтения всей папки?

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете прочитать все имена файлов и 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: _*)

Еслитребуется добавить пути.

Надеюсь, это поможет!

...