如何将多个值传递给spark scala中的单个参数

时间:2018-06-13 06:51:04

标签: scala apache-spark

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
}

这个逻辑正在运行,但我希望每次迭代都将参数p1p2传递到2018年。在这里,我需要每次迭代需要14次迭代来替换下一年的值。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您只需使用年()功能来比较年份,而不是传递整个范围。 here

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
}

答案 1 :(得分:0)

您可以使用p1和p2的可能组合构建一个元组数组,并遍历数组以构建查询并对数组中的每个元素执行。

这样的东西
Map<String,String> maps = environment.getProperty("application.address",HashMap.class); //got null

可以手动构建数组,也可以使用日期函数来添加/减去日期中的月/年。