如何逃避(Spark Scala中的括号?

时间:2017-03-14 14:54:32

标签: scala apache-spark

我正在尝试替换字符串中的括号(即列名)。它适用于空格,但没有(括号。我特意"""\(\\(,但我总是遇到错误。我也尝试了这个提示How can I escape special symbols in scala string?,但它确实帮助了我。你能告诉我怎么解决这个问题吗?

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(" ", "-"))
}

非常感谢!

1 个答案:

答案 0 :(得分:3)

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)

\\(|\\)也应该有效:

newDf.withColumnRenamed(col, col.replaceAll(" ", "-").replaceAll("\\(|\\)", "_"))