Spark集成的包与引入包冲突

今天在编写Spark应用的时候,想把处理结果输出为JSON字符串,查到Java比较常用的JSON处理包gson,按照其API编写代码后运行程序,总是出现"NoSuchMethodException in Gson JsonArray"。
 
开始我以为是导入包的方式有问题,但查看出错位置发现,只有JsonArray的add方法报错了,这里调用add方法把一个String类型变量添加到JsonArray中,前面的调用并未报错,由此看来jar包应该成功导入了。
 
从Intellij IDEA中查看JsonArray类的反编译源码,发现确实没有参数为String的add方法,跟我看到的API文档不同,确认了一下我看的文档与使用的包版本确实是一致的。
 
仔细观察后发现这个类文件的位置在spark-assembly-1.6.0-hadoop2.6.0.jar 中,并不是我导入的gson-2.8.2.jar。由此我意识到,是spark的这个jar包本身打包了gson的类文件,而且其版本比较低,缺少了一些新加入的函数。

 

根据这个低版本内拥有的方法修改后,便可以成功运行。

posted @ 2017-10-12 21:29  HitAnyKey  阅读(1879)  评论(0编辑  收藏  举报