Spark处理一批文本数据的时候,有的文本中存在'\'字符,在拼接Json字符串的时候会错误的将Json的 " 转义掉,这样会导致Json的解析异常,所以需要将'\'去掉,然后首先想到了下面的写法:
val str = """\哈哈哈\"""
// 注意,这是错误的写法!
str.replaceAll("""\""","")
结果出现了下面的异常:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.compile(Pattern.java:1671)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.replaceAll(String.java:2162)
at com.neusoft.apps.Test$.main(Test.scala:37)
at com.neusoft.apps.Test.main(Test.scala)
原因是:'\' 其实在正则表达式中依然是转移字符,虽然 """\""" 这种写法,在Scala中不需要转义就代表 '\' 字符,但是java.util.regex.Pattern中仍然将其视为转义符,而转义符后面没有跟待转义的字符,然后就报错了。
所以,转义符'\' 后再加上 '\' ,再进行一次转义才相当于字符 '\' 。
val str = """\哈哈哈\"""
str.replaceAll("""\\""","")
或者
val str = """\哈哈哈\"""
str.replaceAll("\\\\","")
同理,在String.split()方法中也是如此。
本文介绍在Spark处理文本数据时遇到含有特殊字符''的问题及解决办法。通过正确的字符串替换避免了Json解析异常,并提供了两种有效的转义字符处理方式。
216

被折叠的 条评论
为什么被折叠?



