获取Scala中转义字符的一元错误

获取Scala中转义字符的一元错误,scala,Scala,尝试在Scala/Spark中编写配置单元查询,如下所示 val myQuery = "create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable" 我使用'\t'时出错 value unary_+ is not a member of String 在Scala中处理此

尝试在Scala/Spark中编写配置单元查询,如下所示

val myQuery = "create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable"
我使用'\t'时出错

value unary_+ is not a member of String

在Scala中处理此字符的正确方法是什么?

如果使用单双引号
,则转义字符将根据其含义进行解释,即
\t
将成为选项卡,
\n
将成为新行。例如:

scala> val myQuery = "create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable"
myQuery: String = create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '    ' location 'path/from/to' as select * myHiveTable
scala> val myQuery = """create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable"""
myQuery: String = create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable
如果使用三重双引号,Scala将保留字符串的原样。例如:

scala> val myQuery = "create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable"
myQuery: String = create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '    ' location 'path/from/to' as select * myHiveTable
scala> val myQuery = """create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable"""
myQuery: String = create table myTable(col1 STRING, col2 STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location 'path/from/to' as select * myHiveTable
我相信Spark希望将
\t
视为文本值(2个字符),而不是选项卡(U+0009)的值。

1)您应该对
\t
使用转义斜杠,因为您希望将此查询传递到某个位置(到配置单元)。如果不添加转义斜杠,它会将实际的制表符空白保存到该字符串中,所以hive无法理解它

2) 您没有提供足够的详细信息,尤其是发生错误的代码,您只显示配置单元查询字符串的变量赋值


3) sql示例中的
来自哪里?

是的,它会产生相同的错误。