在一个java Spark(&spring)项目中,我使用了SparkHiveContext,并在执行以下操作时ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceManagerFactory
出现初始错误:
// sparkHiveContext = new JavaHiveContext(sparkContext);
// JavaRDD<MyClass> myRdd = ...
JavaSchemaRDD schema = sparkHiveContext.applySchema(myRdd, MyClass.class);
schema.registerTempTable("temptable");
sparkHiveContext.sql("CREATE TABLE mytable AS SELECT * FROM temptable");
所以我添加了 ̀ datanucleus-core
datanucleus-api-jdo
和 datanucleus-rdbms
maven 依赖项,版本 3.2.1。
但是现在我得到错误...NoSuchMethodError: org.datanucleus.FlushOrdered
.
真正奇怪的是,我确实在生成的战争 WEB-INF/lib 中的 datanucleus-core-3.2.1.jar 中找到了这个类。而且没有其他战争罐子。
有谁知道这是怎么发生的?
详:
- 马文项目
- Spark 1.1.1(提供范围)
- 将 $SPARK_HOME/lib/spark-assembly-1.1.1-hadoop2.4.0.jar 添加到 servlet 容器中
- 使用 Maven Jetty 插件运行(即作为 servlet 容器)
- 在使用Spark-Hive之前,它运行良好
- 我没有安装 Hive,但我们告诉我没有必要
- 我使用 spark Hive 来管理一些 hdfs 文件的 sql 接口,主要是因为 spark sql (1.1.1) 不够好。
好吧,这真的很愚蠢:我对所有数据核心依赖项都使用了 3.2.1 版,而 Spark 提供的数据核心实际上是 3.2.2 :-\
无论如何,在我的路上,我使用spark-hive制作了这个非常简单的春季Webapp原型。如果有人感兴趣。