Spark SQL 特殊字符切割

113 阅读1分钟

工作中经常遇到需要对某个字符串进行切割提取出需要的部分,在Hive中能达到效果,但是在Spark SQL中却不行,尤其是针对转义字符。通常需要加反义字符才能解决。

最常见的转义字符包括 / 和 . ,如果某个字符串包含一个或者多个转义字符时,并且需要按照转义字符进行切割时通常使用的是split函数,该函数包含两个参数,第一个是要切割的字符串,第二个是切割符号,也就是按照什么来进行切割,切完之后是一个数组,如果取的是某一固定部分可以像java数组一样按下标取。

例子

字符串:str = juejin.cn/aaaa/bbb/12…

现在需要把juejin.cn取出来,很明显按照/切割字符串,然后取下标2的部分即可。

Hive中写法: split(str,'\/')[2]

Saprk SQL中写法: split(str,'\\/')[2]

需要注意的是

(1)str = /sfsf/aaaa/bbbb/ 这样按照/切割,切割完之后数组包含五部分,第一部分和最后一部分为空,也就是说如果要取sfsf,那应该是split(str,'\\/')[1]。

(2) 在Spark SQL中split第二个参数必须用单引号,不能用双引号,但是在Hive中单双引号均可。

image.png

总结:在Hive中写SQL和在Spark SQL中还是存在一些细微区别,需要留心,任务执行失败报错可能就是在细微之处。