正则表达式用于修剪分隔符Spark Scala之前和之后的所有空格

时间:2017-02-01 15:38:08

标签: regex scala apache-spark delimiter rdd

我正在使用spark scala读取带分隔符的文本文件。我试图在分隔符之前为所有内容创建一个正则表达式修剪,以及之后的所有内容。目前,我有它修剪所有空间的地方。我正在寻找有关如何实现这一目标或改进的任何建议。也许某种修剪功能会更简单。

 def truncateRDD(fileName : String): RDD[String] = {
    val rdd = sc.textFile(fileName)
    rdd.map(lines => lines.replaceAll("""[\t\p{Zs}]+""", ""))
  }

输入:

20161111 ~     ~10~1234~ "This is an example" ~P15~-EXAMPLE~2017~ 2014567EXAMPLE

期望的输出:

20161111~~10~1234~"This is an example"~P15~-EXAMPLE~2017~2014567EXAMPLE

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是用分隔符(~)分割,然后用trim分割每个结果标记;然后 - 使用mkString

将标记组合回单个字符串
rdd.map(_.split("~").map(_.trim).mkString("~"))

或者 - 使用正则表达式:

rdd.map(_.replaceAll("\\s*?~\\s*", "~"))