spark java scala错误

rkttyhzu  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(548)

嘿,我想在我的java项目中使用spark:
我已经将此依赖项添加到pom文件:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>1.4.0</version>
</dependency>

我试过这个代码:

import org.apache.spark.api.java.JavaSparkContext;

public class sparkSQL {
    public void query() {
        JavaSparkContext sc = new JavaSparkContext();
    }
}

我在main中调用了此函数,但出现以下错误:
线程“main”java.lang.noclassdeffounderror中出现异常:java.lang.classloader.defineclass1(本机方法)处的scala/cloneable位于java.lang.classloader.defineclass(classloader)处。java:800)在java.security.secureclassloader.defineclass(secureclassloader。java:142)在java.net.urlclassloader.defineclass(urlclassloader。java:449)在java.net.urlclassloader.access$100(urlclassloader。java:71)在java.net.urlclassloader$1.run(urlclassloader。java:361)在java.net.urlclassloader$1.run(urlclassloader。java:355)位于java.net.urlclassloader.findclass(urlclassloader)的java.security.accesscontroller.doprivileged(本机方法)。java:354)在java.lang.classloader.loadclass(类加载器。java:425)在sun.misc.launcher$appclassloader.loadclass(launcher。java:308)在java.lang.classloader.loadclass(classloader。java:358)在org.apache.spark.sparkcontext。scala:111)在org.apache.spark.api.java.javasparkcontext。scala:56)在realtimequeries.sparksql.query(sparksql。java:7)在main.main(main。java:25)大引号
原因:java.lang.classnotfoundexception:scala.cloneable at java.net.urlclassloader$1.run(urlclassloader)。java:366)在java.net.urlclassloader$1.run(urlclassloader。java:355)位于java.net.urlclassloader.findclass(urlclassloader)的java.security.accesscontroller.doprivileged(本机方法)。java:354)在java.lang.classloader.loadclass(类加载器。java:425)在sun.misc.launcher$appclassloader.loadclass(launcher。java:308)在java.lang.classloader.loadclass(classloader。java:358) ... 还有16个
块引用
我不明白为什么会出现这个错误,因为通常javasparkcontext是为这个用途创建的:
一个java友好的sparkcontext版本,返回javardds并使用java集合而不是scala集合。
我已经查看了spark-core 2.11依赖的pom,似乎我们可以找到scala依赖:
http://central.maven.org/maven2/org/apache/spark/spark-hive_2.10/1.4.0/spark-hive_2.10-1.4.0.pom
我错过什么了吗?我做错了什么?提前谢谢

ljsrvy3e

ljsrvy3e1#

不要为不同的依赖项混用scala版本,如2.11和2.12(确保所有库都使用相同的scala版本)。
例如,spark-core 2.11是使用2.11 scala版本构建的。所以下面的方法行不通:
//无法工作编译组:'org.apache.spark',名称:'spark-core\u 2.11',版本:'2.4.4'编译组:'org.apache.spark',名称:'spark-sql\u 2.11',版本:'2.4.4'编译组:'io.delta',名称:'delta-core\u 2.12',版本:'0.4.0'
//这是可行的;注意更改:2.11->2.12编译组:'org.apache.spark',名称:'spark-core\u 2.12',版本:'2.4.4'编译组:'org.apache.spark',名称:'spark-sql\u 2.12',版本:'2.4.4'编译组:'io.delta',名称:'delta-core\u 2.12',版本:'0.4.0'

mhd8tkvw

mhd8tkvw2#

类scala.cloneable存在于scala库*.jar中。在将scala库添加到pom.xml之后,这个错误就消失了

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.1</version>
</dependency>
yptwkmov

yptwkmov3#

你可以用 JavaSparkContext 使用java中的spark,但是仍然需要scala,因为spark是用scala编写的。大多数操作在内部转换为scala,或者在内部使用scala类。您可以用java编程所有的东西,但是在类路径中仍然需要scala。
因此,为了修复错误,您需要安装scala并 SCALA_HOME 指向您安装它的目录。

相关问题