【问题标题】:How to replace double quotes with space in Scala如何在Scala中用空格替换双引号
【发布时间】:2020-09-24 00:54:56
【问题描述】:

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

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

【问题讨论】:

  • regexp_replace(column_name, '\"', " ")
  • 你也可以使用translate函数
  • @AlexOtt 感谢您的回复。 Translate 和 regexp_replace 函数返回单位类型,但我想在 scala 中返回字符串类型。
  • 他们返回 Column 类型——这就是它在 Spark SQL 中的工作方式。如果你只需要替换String中的所有内容,那么你需要使用.replaceAll
  • @AlexOtt 但我需要使用 regexp_replace 将双引号(\")替换为空格(“”)。

标签: scala apache-spark


【解决方案1】:

从使用 regexp_replace 和提及列我假设您的意思是 Spark(如果是这样,您应该在以后的任何问题中提及它)。看the signature of the two overloads

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

'\"'Char,而不是 String,因此您需要 "\""

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

更新:

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,'\"',"

等等

\"s"..." doesn't work as expected 内,所以用 \" 转义引号是行不通的;你应该使用三引号字符串。

【讨论】:

  • @alexy 感谢您的回复。我有 scala,我正在使用 scala 变量。我已经发布了完整的字符串。这就是我想要做的,但得到错误“未闭合的字符串文字”。
  • val colString = insertColumns.mkString(",") + s"${month},concat(year(from_unixtime(unix_timestamp((regexp replace(column_name,'\"',"")) , 'yyyy-MM-dd-HH.mm.ss.SSSSSS')),'-',lpad(月(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"
  • 感谢您的回复。我试过下面的命令 insertColumns.mkString(",") + s"""${column},concat(year(from_unixtime(unix_timestamp((regexp_replace(column_name,\","")),
  • 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))),'-',lpad(月(from_unixtime(unix_timestamp((regexp_replace(column_name,\","") ),
猜你喜欢
  • 2011-01-22
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2020-08-20
相关资源
最近更新 更多