Spark源码编译cannot resolve symbol SqlBaseParser

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

  1. 点击右边的maven项目,选择catalyst 模块下的plugins,然后选择antlr4下的antlr4:antlr4,双击运行,如下图所示

     运行结果:

  2. 配置source
    打开idea的 file->project structure -> modules -> spark-catalyst-> sources -> target -> generate-sources -> antlr4,将其选为source。如下图所示:

问题解决。

原文地址:https://www.cnblogs.com/limaosheng/p/15799506.html