gpt4 book ai didi

scala - java.lang.NoSuchMethodError : scala. Predef$.refArrayOps 在 Spark 作业中使用 Scala

转载 作者:行者123 更新时间:2023-12-04 01:27:12 30 4
gpt4 key购买 nike

完整错误:

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object; at org.spark_module.SparkModule$.main(SparkModule.scala:62) at org.spark_module.SparkModule.main(SparkModule.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:845) at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161) at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)



当我在 IntelliJ 中编译和运行代码时,它一直执行得很好。当我将 .jar 作为 spark 作业(运行时)提交时,错误显示。

第 62 行包含: for ((elem, i) <- args.zipWithIndex) .为了确定,我注释掉了其余的代码,并且错误一直显示在该行上。

一开始我以为是 zipWithIndex的错。然后我把它改成了 for (elem <- args)猜猜看,错误仍然显示。是 for造成这个?

谷歌搜索总是指出用于编译的版本和运行时使用的版本之间的 Scala 版本不兼容,但我找不到解决方案。

我试过 this检查 IntelliJ 使用的 Scala 版本,这里是 Modules > Scala 下与 Scala 相关的所有内容:

enter image description here

然后我做了 this检查 Scala 的运行时版本,输出为:

(file:/C:/Users/me/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.11/1a0634714a956c1aae9abefc83acaf6d4eabfa7d/scala-library-2.12.11.jar )



版本似乎匹配...

这是我的 gradle.build (包括 fatJar 任务)
group 'org.spark_module'
version '1.0-SNAPSHOT'

apply plugin: 'scala'
apply plugin: 'idea'
apply plugin: 'eclipse'

repositories {
mavenCentral()
}

idea {
project {
jdkName = '1.8'
languageLevel = '1.8'
}
}

dependencies {
implementation group: 'org.scala-lang', name: 'scala-library', version: '2.12.11'
implementation group: 'org.apache.spark', name: 'spark-core_2.12'//, version: '2.4.5'
implementation group: 'org.apache.spark', name: 'spark-sql_2.12'//, version: '2.4.5'
implementation group: 'com.datastax.spark', name: 'spark-cassandra-connector_2.12', version: '2.5.0'
implementation group: 'org.apache.spark', name: 'spark-mllib_2.12', version: '2.4.5'
implementation group: 'log4j', name: 'log4j', version: '1.2.17'
implementation group: 'org.scalaj', name: 'scalaj-http_2.12', version: '2.4.2'
}

task fatJar(type: Jar) {
zip64 true
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}

manifest {
attributes 'Main-Class': 'org.spark_module.SparkModule'
}

with jar
}

configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:12.0.1'
}
}

compileScala.targetCompatibility = "1.8"
compileScala.sourceCompatibility = "1.8"

jar {
zip64 true
getArchiveFileName()
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'org.spark_module.SparkModule'
}

exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'

}

要构建(胖) jar :
gradlew fatJar

在 IntelliJ 的终端中。

运行作业:
spark-submit.cmd .\SparkModule-1.0-SNAPSHOT.jar

在 Windows PowerShell 中。

谢谢

编辑:

spark-submit.cmd spark-shell.cmd 两者都显示 Scala 版本 2.11.12 ,所以是的,它们与我在 IntelliJ 中使用的不同( 2.12.11 )。问题是,在 Spark's download page ,只有一个 Spark distribution for Scala 2.12它没有 Hadoop;这是否意味着我必须在我的 中从 2.12 降级到 2.11 gradle.build ?

最佳答案

我会尝试 spark-submit --version想知道什么scala version正在使用 sparkspark-submit --version我得到这个信息

[cloudera@quickstart scala-programming-for-data-science]$ spark-submit --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.2.0.cloudera4
/_/

Using Scala version 2.11.8, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_202
Branch HEAD
Compiled by user jenkins on 2018-09-27T02:42:51Z
Revision 0ef0912caaab3f2636b98371eb29adb42978c595
Url git://github.mtv.cloudera.com/CDH/spark.git
Type --help for more information.
来自 spark-shell你可以试试这个来了解 scala version
scala> util.Properties.versionString
res3: String = version 2.11.8
OS可能正在使用其他 scala version ,就我而言,如您所见 spark scala versionOS scala version是不同的
[cloudera@quickstart scala-programming-for-data-science]$ scala -version
Scala code runner version 2.12.8 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
备注
来自 O'Really Learning Spark “霍尔顿·卡劳、安迪·康温斯基、帕特里克·温德尔和马泰·扎哈里亚”
依赖冲突
一个偶尔会造成破坏的问题是处理 dependency conflicts在这种情况下
用户应用程序和 Spark本身都依赖于同一个库。这出现
相对较少,但一旦发生,用户就会感到烦恼。通常,这将体现
本身当 NoSuchMethodError , ClassNotFoundException ,或其他一些 JVM exception在执行 Spark 期间抛出与类加载相关的问题工作。
这个问题有两种解决方案。首先是将您的应用程序修改为
依赖相同版本的 third-party library那个 Spark做。第二个是
使用通常称为的过程修改应用程序的打包
底纹 。” Maven构建工具通过高级配置支持着色
例 7-5 中显示的插件(实际上, 着色 功能是插件的原因
被命名 maven-shade-plugin )。 底纹 允许您制作第二个副本
不同命名空间下的冲突包并重写应用程序的代码
使用重命名的版本。这有点 brute-force技术非常有效
解析运行时间 dependency conflicts .有关如何操作的具体说明 遮阳
依赖项,请参阅构建工具的文档。

关于scala - java.lang.NoSuchMethodError : scala. Predef$.refArrayOps 在 Spark 作业中使用 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61675153/

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