如何转义(Spark Scala中的括号)?

如何转义(Spark Scala中的括号)?,scala,apache-spark,Scala,Apache Spark,我正在尝试替换字符串中的括号(即列名)。它可以很好地处理空格,但不能处理(括号)。我使用treid“”“,”(,)(,\)(但我总是遇到错误。我也尝试了这个技巧,但它确实帮助了我。你能告诉我如何解决这个问题吗 import org.apache.commons.lang3.StringEscapeUtils var newDf = df for(col <- df.columns){ newDf = newDf.withColumnRenamed(col,col.replac

我正在尝试替换字符串中的括号(即列名)。它可以很好地处理空格,但不能处理
括号)。我使用treid
“”“
”(
)(
\)(
但我总是遇到错误。我也尝试了这个技巧,但它确实帮助了我。你能告诉我如何解决这个问题吗

import org.apache.commons.lang3.StringEscapeUtils

var newDf = df
  for(col <- df.columns){
    newDf = newDf.withColumnRenamed(col,col.replaceAll(StringEscapeUtils.escapeJava("("), "_"))
    newDf = newDf.withColumnRenamed(col,col.replaceAll(" ", "-"))
}
import org.apache.commons.lang3.StringEscapeUtils
var newDf=df
for(colreplaceAll使用正则表达式,因此您可以将括号放在字符类中,而不必通过该字符类进行转义:

val df = Seq((1,2)).toDF("(ABC)", "C D")

df.columns
// res28: Array[String] = Array((ABC), C D)

var newDf = df
for(col <- df.columns){
    newDf = newDf.withColumnRenamed(col, col.replaceAll(" ", "-").replaceAll("[()]", "_"))
}

newDf.columns
// res30: Array[String] = Array(_ABC_, C-D)
replaceAll使用正则表达式,因此您只需将括号放在字符类中,而不必对其进行转义:

val df = Seq((1,2)).toDF("(ABC)", "C D")

df.columns
// res28: Array[String] = Array((ABC), C D)

var newDf = df
for(col <- df.columns){
    newDf = newDf.withColumnRenamed(col, col.replaceAll(" ", "-").replaceAll("[()]", "_"))
}

newDf.columns
// res30: Array[String] = Array(_ABC_, C-D)

工作就像一个咒语。它总是那么令人厌恶。:-(非常感谢!工作就像一个咒语。它总是那么令人厌恶。:-(非常感谢!