gpt4 book ai didi

apache-spark - 无法从 Apache Spark SQL 1.5.2 在 SQLContext 中运行查询,得到 java.lang.NoSuchMethodError

转载 作者:行者123 更新时间:2023-12-05 00:20:33 24 4
gpt4 key购买 nike

我有一个 Java 应用程序使用 Spark SQL ( 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 依赖项如下所示:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.2</version>
</dependency>

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.5.2</version>
</dependency>

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.10</artifactId>
<version>1.5.2</version>
</dependency>

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-repl_2.10</artifactId>
<version>1.5.2</version>
</dependency>

这是我得到的错误:
java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class;

堆栈跟踪 here

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

EDIT :我找到了一个 issue ,它提供了有关该问题的更多信息。

最佳答案

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

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

我尝试了很多方法来解决这个冲突问题,最后以下对我有用-

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

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

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

为什么这会起作用?

在 Maven 2.0.9 中,添加了传递依赖项的新特性。

Dependency mediation - this determines what version of a dependency will be used when multiple versions of an artifact are encountered. Currently, Maven 2.0 only supports using the "nearest definition" which means that it will use the version of the closest dependency to your project in the tree of dependencies. You can always guarantee a version by declaring it explicitly in your project's POM. Note that if two dependency versions are at the same depth in the dependency tree, until Maven 2.0.8 it was not defined which one would win, but since Maven 2.0.9 it's the order in the declaration that counts: the first declaration wins.



Maven Transitive Dependency

关于apache-spark - 无法从 Apache Spark SQL 1.5.2 在 SQLContext 中运行查询,得到 java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com