spark 的踩坑记录(二)spark 字符串截取问题
前言
接之前的spark踩坑记录,回想起当时折磨很久的一个问题,结果导致开发中花了很长时间才完全解决。
主要原因为spark 和 java 的字符串截取函数不一致导致的。
主要技术框架背景介绍
spark : 2.4.3
scala : 2.11.12
背景
实际工作中会处理很多文本数据流,例如文章信息,评论信息等,调用的 内部的NLP相关的接口会返回一些索引值作为敏感词、关键词等,但是截取之后词义不正确。
问题描述
spark sql substr / substring 函数
java String substring 函数
在数据流的处理过程中,使用 spark sql 的 substr 函数会出现截取字符串不正确的问题。
技术侧,后续查看源码发现,spark 的 substr 内部是自实现的截取函数,底层并没有使用 java String substring;
在业务上观察,因为网络上真实的文章数据和评论等,带有各种表情包符号或其他特殊符号,其他团队提供的接口只返回了截取index,且两个截取函数面对不同的表情符号,index 可能也会互相变化,无法完成严格的统一。
解决方案
使用 spark sql reflect 函数,使用反射的方式保持和其他团队使用统一的字符串函数,完成截取之后的数据的统一。