簡體   English   中英

Spark Java Scala錯誤

[英]Spark Java scala error

嘿,我想在我的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();
    }
}

我在我的主程序中調用了此函數,但出現此錯誤:

線程“主”中的異常java.lang.NoClassDefFoundError:scala / Cloneable在java.lang.ClassLoader.defineClass1(本機方法)在java.lang.ClassLoader.defineClass(ClassLoader.java:800)在java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)at java.net.URLClassLoader.access $ 100(URLClassLoader.java:71)at java.net.URLClassLoader $ 1.run(URLClassLoader。 java.net.URLClassLoader上的java:361)$ URL.Load.run(URLClassLoader.java:355)上java.net.URLClassLoader.findClass(URLClassLoader.java:354)上的java.security.AccessController.doPrivileged(本機方法)。 org.apache.spark處的java.lang.ClassLoader.loadClass(ClassLoader.java:358)處的sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)處的lang.ClassLoader.loadClass(ClassLoader.java:425) org.apache.spark.api.java.JavaSparkContext。(JavaSparkContext.scala:56)上的.SparkContext。(SparkContext.scala:111)在main.ma上的實時查詢.sparkSQL.query(sparkSQL.java:7) in(main.java:25)塊引用

造成原因:java.lang.ClassNotFoundException:scala.Cloneable at java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at java.security.AccessController .doPrivileged(本機方法)(位於java.net.URLClassLoader.findClass(URLClassLoader.java:354)(位於java.lang.ClassLoader.loadClass(ClassLoader.java:425)),位於sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java) :308)at java.lang.ClassLoader.loadClass(ClassLoader.java:358)...還有16個

塊引用

我不明白為什么會收到此錯誤,因為通常為此用途創建了JavaSparkContext:

SparkContext的Java友好版本,它返回JavaRDD,並與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

我錯過了什么 ? 我做錯了什么? 提前致謝

scala.Cloneable類存在於scala-library * .jar中。 將scala庫添加到pom.xml后,此錯誤對我而言不再存在

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

不要為不同的依賴項混合使用2.11和2.12之類的scala版本(確保所有庫都使用相同的scala版本)。

例如,使用2.11 scala版本構建spark-core_2.11。 因此,以下內容將不起作用:

//無效編譯組:“ org.apache.spark”,名稱:“ spark-core_2.11”,版本:“ 2.4.4”編譯組:“ org.apache.spark”,名稱:“ spark-sql_2 .11”,版本:“ 2.4.4”,編譯組:“ io.delta”,名稱:“ delta-core_2.12”,版本:“ 0.4.0”

//這會起作用; 注意更改:2.11-> 2.12編譯組:'org.apache.spark',名稱:'spark-core_2.12',版本:'2.4.4'編譯組:'org.apache.spark',名稱:' spark-sql_2.12',版本:'2.4.4'編譯組:'io.delta',名稱:'delta-core_2.12',版本:'0.4.0'

您可以使用JavaSparkContext與Java中的Spark一起使用,但是由於Spark是用Scala編寫的,因此您仍然需要scala。 大多數操作都在內部轉換為scala,或在內部使用scala類。 您可以使用Java編寫所有程序,但在類路徑中仍然需要scala。

因此,為了糾正錯誤,您需要安裝scala並使SCALA_HOME指向您安裝它的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM