我有一个接受多个参数的hql文件,然后在独立的spark应用程序中,我将此hql脚本称为创建数据框。
这是我的脚本中的示例hql代码:
select id , name, age, country , created_date
from ${db1}.${table1} a
inner join ${db2}.${table2} b
on a.id = b.id
这就是我在Spark脚本中调用它的方式:
import scala.io.Source
val queryFile = `path/to/my/file`
val db1 = 'cust_db'
val db2 = 'cust_db2'
val table1 = 'customer'
val table2 = 'products'
val query = Source.fromFile(queryFile).mkString
val df = spark.sql(query)
当我使用这种方式时,我得到:
org.apache.spark.sql.catylyst.parser.ParserException
有没有一种方法可以将参数直接传递到我的hql文件,然后从配置单元代码中创建df。
答案 0 :(得分:0)
可以使用以下代码注入参数:
val parametersMap = Map("db1" -> db1, "db2" -> db2, "table1" -> table1, "table2" -> table2)
val injectedQuery = parametersMap.foldLeft(query)((acc, cur) => acc.replace("${" + cur._1 + "}", cur._2))