【问题标题】:Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)线程“main”中的异常 java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)
【发布时间】:2020-04-01 02:30:59
【问题描述】:

我收到此错误的任何原因?最初 Scala 的 IDE 插件是 2.12.3。但由于我使用的是 Spark 2.2.0,因此我手动将其更改为 Scala 2.11.11。

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
17/09/19 12:08:19 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
    at scala.xml.Null$.<init>(Null.scala:23)
    at scala.xml.Null$.<clinit>(Null.scala)
    at org.apache.spark.ui.jobs.AllJobsPage.<init>(AllJobsPage.scala:39)
    at org.apache.spark.ui.jobs.JobsTab.<init>(JobsTab.scala:38)
    at org.apache.spark.ui.SparkUI.initialize(SparkUI.scala:67)
    at org.apache.spark.ui.SparkUI.<init>(SparkUI.scala:84)
    at org.apache.spark.ui.SparkUI$.create(SparkUI.scala:221)
    at org.apache.spark.ui.SparkUI$.createLiveUI(SparkUI.scala:163)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:452)
    at sparkEnvironment$.<init>(Ticket.scala:33)
    at sparkEnvironment$.<clinit>(Ticket.scala)
    at Ticket$.main(Ticket.scala:39)
    at Ticket.main(Ticket.scala)

【问题讨论】:

    标签: scala apache-spark intellij-idea sbt


    【解决方案1】:

    确保 Spark 与对应的 Scala 版本兼容

    将 Scala 版本 2.12 系列与任何提供 Scala 2.11 的 Spark 版本一起使用时,该错误很常见。

    您可以尝试将2.11 系列的 Scala 与 Spark 结合使用。即

    libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.2.0"
    

    正如您在此依赖项中看到的那样,spark-core_2.11 与 scala 版本 2.11 相关联。

    这就是为什么使用%% 更安全(更兼容)并避免在 Spark 依赖项中硬编码 Scala 版本的原因。让工具自动为您解析所需的 Scala 版本,如下所示:

    libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.0"
    

    上面的声明会自动推断scala版本。

    【讨论】:

    • 感谢您的提示!是的,我确实进行了更改,但最初也没有成功。后来发现 Scala 2.12 库在优先级上与 Scala 2.11 冲突。所以,我开始了一个仅使用 Scala 2.11 的新项目,删除了所有 Scala 2.12 的东西。
    • 谢谢。我改成 2.11.7 来解决这个问题,但是为什么 2.12 不能在 spark 上工作呢?谢谢
    • 因为 Spark 2.2.0 版本是使用 Scala 2.11.x 以及一些内部 guuf ups 构建的。
    • 我想指出,不仅编译的spark版本必须兼容,执行二进制版本也必须兼容。例如,如果您使用 spark 3.0 和 scala 2.12 编译,则 spark-submit 版本也必须是 3.0 版
    猜你喜欢
    • 2020-02-02
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2019-09-24
    • 2011-02-20
    相关资源
    最近更新 更多