Scala 字符串变量替换 [英] Scala String Variable Substitution

查看:37
本文介绍了Scala 字符串变量替换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆