我通过使用如下数据框创建了两个数组。
Array1:
val df1 = hc.sql("select name from employee")
val name = df1.collect().map(_.getString(0))
Array2:
val df2 = hc.sql("select dept from employee")
val dept= df2.collect().map(_.getString(0))
现在,我想使用胡子创建动态SQL。我在下面的scala程序中尝试过以下方法。
object Sample {
def main(args: Array[String]): Unit = {
val mf: MustacheFactory = new DefaultMustacheFactory
val Conf = new SparkConf().setAppName("Form5500")
val sc = new SparkContext(Conf)
val hc = new HiveContext(sc)
// preparing a query
val query = mf.compile("sql/sample.sql")
val returnQuery = new StringWriter()
val jMap = new java.util.HashMap[String, Object]()
val df1 = hc.sql("select name from employee")
val name = df1.collect().map(_.getString(0))
val df2 = hc.sql("select dept from employee")
val dept= df2.collect().map(_.getString(0))
jMap.put("condition","true")
jMap.put("name", name)
jMap.put("dept", dept)
query.execute(returnQuery, jMap).flush()
// returns dynamically built sql
println(returnQuery.toString)
}
}
我的sample.sql文件如下所示,使用胡子
create table sample(
id string
{{#condition}}
, if_block string
{{/condition}}
{{^condition}}
, else_block string
{{/condition}}
{{#name}}
{{#dept}}
, {{name}}_{{dept}} string
{{/dept}}
{{/name}}
)
我正在得到空字符串代替{{name}}_{{dept}}
。
请让我知道如何使用胡子来获得高于价值的价值。
预先感谢