scala条件替换,Scala字符串变量替换

I have spark code written in scala. Spark Reads meta tables (already in spark as temp table) which stores the SQL to be executed.

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");

I am geting sql displayed correctly.

// date is also temp table in spark

select * from date where load_date >= '${begindate}' and load_date <='${enddate}'

Next step is to execute this sql

dynamic_sql_find = sqlContext.sql(check_query);

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.

Can you please help ?

解决方案

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值