0

我有一些带有“”(双引号)的记录的数据文件。我需要使用 regexp_replace 函数将这些引号替换为 scala 中的空格。

示例:regexp_replace(column_name, '\"' ," ")但是当我尝试这样做时,我收到了一些错误“未闭合”字符串文字。

4

1 回答 1

2

从使用regexp_replace和提及列中,我假设您的意思是 Spark(如果是这样,您应该在以后的任何问题中提及它)。查看两个重载的签名

def regexp_replace(e: Column, pattern: Column, replacement: Column): Column
def regexp_replace(e: Column, pattern: String, replacement: String): Column

'\"'是 a Char,而不是 a String,所以你需要"\""

在没有 Spark 的 Scala 中,您将使用 on 之类replace{All,FirstSome}In的方法scala.util.matching.Regex(主要针对发现此问题的其他人提及)。

更新:

val colString = insertColumns.mkString(",") + s"${month},concat(year(from_unixtime(unix_timestamp((regexp replace(column_name,'\"',"")), 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))),'-',lpad(month(from_unixtime(unix_timestamp((regexp_replace(column_name,'\"',"")), 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))),2,'0'),'-',lpad(day(from_unixtime(unix_timestamp((regexp_replace(column_name,'\"',"")), 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))),2,'0')) AS column_name"

这里后面的字符串+只有

s"${month},concat(year(from_unixtime(unix_timestamp((regexp replace(column_name,'\"',"

然后你有单独的字符串文字

")), 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))),'-',lpad(month(from_unixtime(unix_timestamp((regexp_replace(column_name,'\"',"

等等

\"inside ans"..." 不能按预期工作,因此转义引号\"不起作用;您应该使用三引号字符串。

于 2020-09-23T10:29:13.203 回答