当前位置:  开发笔记 > 编程语言 > 正文

无法在Apache Spark SQL 1.5.2的SQLContext中运行查询,获取java.lang.NoSuchMethodError

如何解决《无法在ApacheSparkSQL1.5.2的SQLContext中运行查询,获取java.lang.NoSuchMethodError》经验,为你挑选了1个好方法。

我有一个使用Spark SQL的Java应用程序(Spark 1.5.2使用本地模式),但是我不能在没有错误的情况下执行任何SQL命令.

这是我正在执行的代码:

//confs
SparkConf sparkConf = new SparkConf();  
sparkConf.set("spark.master","local");
sparkConf.set("spark.app.name","application01");
sparkConf.set("spark.driver.host","10.1.1.36");
sparkConf.set("spark.driver.port", "51810");
sparkConf.set("spark.executor.port", "51815");
sparkConf.set("spark.repl.class.uri","http://10.1.1.36:46146");
sparkConf.set("spark.executor.instances","2");
sparkConf.set("spark.jars","");
sparkConf.set("spark.executor.id","driver");
sparkConf.set("spark.submit.deployMode","client");
sparkConf.set("spark.fileserver.uri","http://10.1.1.36:47314");
sparkConf.set("spark.localProperties.clone","true");
sparkConf.set("spark.app.id","app-45631207172715-0002");

//Initialize contexts
JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new SQLContext(sparkContext);           

//execute command
sqlContext.sql("show tables").show();

pom.xml中的 Spark依赖关系如下所示:


  org.apache.spark
  spark-core_2.10
  1.5.2



  org.apache.spark
  spark-sql_2.10
  1.5.2



  org.apache.spark
  spark-hive_2.10
  1.5.2



  org.apache.spark
  spark-repl_2.10
  1.5.2

这是我得到的错误:

java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class;

堆栈跟踪是在这里.

我的应用程序是在Tomcat 7上运行的Web应用程序.我没有任何其他配置文件.我能做错什么?可能是一些依赖冲突,因为我能够在一个干净的项目中运行相同的代码?

编辑:我发现了一个问题,提供了有关该问题的更多信息.



1> outlier229..:

在这种情况下,由于maven依赖冲突而发生NoSuchMethodError .

编译期间项目使用的库要么不可用,要么在运行时使用该库的其他版本.

我尝试了很多东西来解决这个冲突问题,最后跟着为我工作 -

只需将jackson.databind的正确依赖版本添加为pom.xml中的第一个依赖项.

使用版本2.4.x或更高版本的jackson.databind依赖项.

注意:这仅适用于Maven 2.0.9及更高版本.

为什么会这样?

在Maven 2.0.9中,添加了传递依赖的新功能.

依赖关系中介 - 确定在遇到工件的多个版本时将使用哪个版本的依赖关系.目前,Maven 2.0仅支持使用"最接近的定义",这意味着它将在依赖树中使用与项目最接近的依赖项版本.您可以通过在项目的POM中明确声明它来保证版本.请注意,如果两个依赖关系版本在依赖关系树中处于相同的深度,则直到Maven 2.0.8没有定义哪一个会赢,但是自Maven 2.0.9开始,它就是声明中的顺序:第一个声明获胜.

Maven传递依赖

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有