[英]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.