читать файлы с текущей даты минус 90 дней в спарке - PullRequest
0 голосов
/ 18 января 2019

Я читаю все один за другим файлы, которые хранятся в структуре каталогов как YY=18/MM=12/DD=10 и должны только для чтения current date minus 60 days.Файлы будут создаваться для каждого дня, а также возможно, что когда-нибудь файлы не будут создаваться.Итак, на этот день папка не будет создана.

Я читаю все файлы, которые хранятся в структуре каталогов как YY/MM/DD.Я пишу код ниже, но он не работает.

 var datecalculate = {
 var days = 0
 do{
 val start = DateTime.now

 var start1 = DateTime.now.minusDays(days)
 days = days + 1
 var start2 = start1.toString
 datecalculatenow(start2) }

while (days <= 90) 
}    



def datecalculatenow(start2:String):String={
var YY:String = start2.toString.substring(0,4)

var MM:String = start2.toString.substring(5,7)

var DD:String = start2.toString.substring(8,10)

 var datepath = "YYYY=" + YY +"/MM=" +MM +"/DD=" +DD
 var datepath1 = datepath.toString

 org.apache.spark.sql.SparkSession.read.option("delimiter","|").
 option("header","true").option("inferSchema","true").
 csv("/Table/Files" + datepath1  )
 }

Я ожидаю прочитать все файлы с текущей даты минус 60 дней, структура каталогов которых равна YY/MM/DD

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Поскольку возможно создание кадра данных из списка путей, почему вы не сначала генерируете список путей. Вот простой и краткий способ чтения данных из нескольких путей:

val paths = (0 until 90).map(days => {
  val tmpDate = DateTime.now.minusDays(days).toString()
  val year = tmpDate.substring(0,4)
  val month = tmpDate.substring(5,7)
  val opdate = tmpDate.toString.substring(8,10)
  (s"basepath/YY=$year/MM=$month/DD=$opdate")
}).toList

val df = spark.read.
        option("delimiter", "|").
        option("header", "true").
        option("inferSchema","true")
        .csv(paths:_*)

При генерации paths вы можете отфильтровать несуществующие пути. Я использовал некоторые из ваших кодов с некоторыми изменениями. Я не проверял в моей локальной установке, но идея та же. Надеюсь, это поможет вам.

0 голосов
/ 18 января 2019

С помощью spark sql вы можете использовать следующее в операторе выбора, чтобы вычесть 90 дней;

date_sub(CAST(current_timestamp() as DATE), 90)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...