Scala字符串变量替换 [英] Scala String Variable Substitution
问题描述
我有用Scala编写的Spark代码. Spark读取存储要执行的SQL的元表(已经在spark中作为临时表).
I have spark code written in scala. Spark Reads meta tables (already in spark as temp table) which stores the SQL to be executed.
我面临的问题是我们有使用变量(在scala代码中定义)的查询
Problem I am facing is that we have queries which uses variables (defined in scala code)
我尝试了不同的方法,但无法用值替代变量.
I tried different methods but I am not able to substitute variable with value.
var begindate= s"2017-01-01";
var enddate = s"2017-01-05";
Msg.print_info(s"begin processing from ${beginDate} to ${endDate}");
//Reading SQL from MetaData table stored in spark as meta_table (temp table)
val dynamic_read_sql = s"""
select SQL_TEXT
from meta_table""";
val dynamic_sql_query = sqlContext.sql(dynamic_read_sql);
val check_query = dynamic_sql_query.first().getString(0);
Msg.print_info(s"check_query = $check_query");
我正在正确显示sql.
I am geting sql displayed correctly.
// date is also temp table in spark
select * from date where load_date >= '${begindate}' and load_date <='${enddate}'
下一步是执行此sql
Next step is to execute this sql
dynamic_sql_find = sqlContext.sql(check_query);
但是它无法替换代码中已经定义的'$ {begindate}'和'$ {enddate}'.因此,返回0条记录.
But it fails to replace '${begindate}' and '${enddate}' which are already defined in code. Hence, returns 0 records.
我试图将商店存储在另一个变量中.
I tried to store the store in another variable.
val replace_check_query = s"${check_query}"
但是,它没有替换变量.
But, It did not replace the variable.
可以请您帮忙吗?
推荐答案
正如@radumanolescu正确地说的那样,begindate和enddate仅在编译时被替换.要在运行时替换这些字符串,您可以手动替换子字符串:
As @radumanolescu correctly said, begindate and enddate are substituted only at compile time. To substitute these at runtime you can replace substrings manually:
val dynamic_sql_query = sqlContext.sql(check_query).replace("${begindate}", begindate).replace("${enddate}", enddate)
这篇关于Scala字符串变量替换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!