Как перебрать два массива с помощью усов - PullRequest
0 голосов
/ 03 января 2019

Я создал два массива, используя кадры данных, как показано ниже.

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

Заранее спасибо

...