Как я могу передать несколько значений в один параметр в искровой Scala - PullRequest
0 голосов
/ 13 июня 2018
def(df:DataFrame):DataFrame = {
  val emptyDf = Seq.empty[(Long,String)].toDF()
  val p1 = "('2005-01-01')"
  val p2 = "('2005-12-31')"
  val query = sqlContext.sql(s""" select * from ${emp} where ${dt} between ${p1} and ${p2} """)
  for((i,j)<-k) {
    some operation
  }
  emptyDf
}

Эта логика работает, но я хочу передать параметры p1 и p2 до 2018 для каждой итерации.Здесь мне нужно 14 итераций, каждая из которых должна заменить значение следующего года.Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете создать массив кортежей с возможными комбинациями p1 и p2 и выполнить итерацию по массиву, чтобы построить свой запрос и выполнить для каждого элемента в массиве.

Что-то вроде

val dateRanges : Array[(String,String)]= Array(("2005-01-01","2005-12-31"), 
                                               ("2006-01-01","2006-12-31"))
dateRanges.foreach(//execute your method here)

Массив можно построить вручную или использовать функции даты, чтобы сложить / вычесть месяцы / годы из даты.

0 голосов
/ 13 июня 2018

Вместо прохождения всего диапазона вы можете просто использовать функцию year () , чтобы просто сравнить год. здесь

def(df:DataFrame):DataFrame = {
    val emptyDf = Seq.empty[(Long,String)].toDF()
    val p = "'2005'"
    val query = sqlContext.sql(s""" select * from ${emp} where year(${dt}) = ${p} """)
    for((i,j)<-k) {
        some operation
    }
    emptyDf
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...