1.Spark编译报错SqlBaseParser
Spark源码编译报错:cannot resolve symbol SqlBaseParser,如下图所示。
2.SqlBaseParser缺失原因
Antlr 是一个基于 Java 开发的功能强大的语言识别工具,Antlr 以其简介的语法和高速的运行效率在这类工具中出类拔萃。当你需要开发一种领域语言时,语言可能像 Excel 中的公式一样复杂,也可能像本文中的例子一样简单(只有算术运算),这时你可以考虑使用 Antlr 来处理你的语言。
简单来说,antlr可以理解为你可以自定义语法,然后antlr会自动为你生成api,你就可以使用这些api来解析你的自定义语法了,而spark中的sql解析就是使用了antlr4.
上文中的cannot resolve symbol SqlBaseParser的报错,说的就是找不到antlr4生成的代码。
知道了原因,也就好解决了。
3.解决方案
3.1方案一-使用antlr4生成代码,配置source
- 点击右边的maven项目,选择catalyst 模块下的plugins,然后选择antlr4下的antlr4:antlr4,双击运行,如下图所示
运行结果:
- 配置source
打开idea的 file->project structure -> modules -> spark-catalyst-> sources -> target -> generate-sources -> antlr4,将其选为source。如下图所示:
问题解决。