Я создал два массива, используя кадры данных, как показано ниже.
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}}
.
Пожалуйста, дайте мне знать, как получить значение выше, используя усы.
Заранее спасибо