【发布时间】:2021-06-12 17:49:31
【问题描述】:
我正在尝试进行 spark 提交以检查与一些简单的 scala 代码的兼容性
println("Hi there")
val p = Some("pop")
p match {
case Some(a) => println("Matched " + a)
case _ => println("00000009")
}
scala 版本:2.12.5 火花版本:2.4.6
目前在通过 spark-submit 2.4.7 构建和运行 jar 之后 它给出了:
Hi there
Exception in thread "main" java.lang.NoSuchMethodError: scala.Some.value()Ljava/lang/Object;
at MangoPop$.main(MangoPop.scala:9)
at MangoPop.main(MangoPop.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)
log4j:WARN No appenders could be found for logger (org.apache.spark.util.ShutdownHookManager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
从 maven 看来,spark 2.4.6 支持 scala 2.12 https://mvnrepository.com/artifact/org.apache.spark/spark-core
但是当使用 spark submit 3.0.2 运行时,它运行良好。
spark 2.4.6 我缺少什么
(也尝试使用 spark 2.4.7,即使没有实际的 spark 依赖项/代码,只有 scala)
运行 spark 提交为
~/Downloads/spark-2.4.7-bin-hadoop2.7/bin$ ./spark-submit --class=Test myprojectLocation..../target/scala-2.12/compatibility-check_2.12-0.1.jar
/spark-2.4.7-bin-hadoop2.7/bin$ ./spark-submit --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.7
/_/
Using Scala version 2.11.12, OpenJDK 64-Bit Server VM, 1.8.0_282
Branch HEAD
Compiled by user prashant on 2020-09-08T05:22:44Z
Revision 14211a19f53bd0f413396582c8970e3e0a74281d
Url https://prashant:Sharma1988%235031@gitbox.apache.org/repos/asf/spark.git
Type --help for more information.
还尝试从 2.4.6 下载 https://archive.apache.org/dist/spark/spark-2.4.6/
但找不到 scala 2.12
我们是否还可以明确提及在执行 spark-submit 或 spark-shell 时使用哪个 scala 版本,因为在配置中它似乎支持两者,但它使用了较低的版本,即 2.11
这是 load-spark-env.cmd 文件
rem Setting SPARK_SCALA_VERSION if not already set.
set ASSEMBLY_DIR2="%SPARK_HOME%\assembly\target\scala-2.11"
set ASSEMBLY_DIR1="%SPARK_HOME%\assembly\target\scala-2.12"
【问题讨论】:
-
将 scala 版本更改为 2.11.8,并确保您的主类在 build.sbt 中定义
-
是 Spark
2.4.6可以与 Scala2.12交叉编译,但是安装必须选择一个确切的版本,而且非常可能您的安装正在使用 Scala2.11 -
嗨@NassereddineBelghith,实际上我是使用scala 2.12
-
嗨@LuisMiguelMejíaSuárez,我从spark.apache.org/news/spark-2-4-7-released.html 下载了spark 2.4.7。但 2.4.7 似乎也支持 scala 2.12,顺便说一句,您指的是哪个安装?
-
@supernatural 您使用 spark-submit 下载并安装的那个,运行 spark-shell 它将显示您确切的 Scala 它正在使用的版本,理想情况下你应该使用那个版本,甚至是错误修复版本(第三个数字)。 - 顺便说一句,如果您只是想学习 Spark,我建议您只从 sbt 运行它,而不是将其安装在您的计算机中,这样它将使用 Scala 您在
build.sbt文件中设置的版本
标签: scala apache-spark sbt