java - NoSuchMethodError : scala. collection.mutable.Buffer$.empty()Lscala/collection/GenTraversable

标签 java scala apache-spark apache-spark-sql

当前我正在编译 JAR 文件,但由于出现标题中的错误,因此无法运行 JAR。我使用 sbt assembly 进行编译,以便包含所有依赖项。

斯卡拉 2.11.12 Spark 2.4.2

package com.foo.bar

import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import Array._

object DebugApp extends App {

  override def main(args: Array[String]) {
    if (args.length == 0) {
        println("Must pass in args:  sparkMaster, dataPath")
    }
    val sparkMaster            = args(0)
    val bucket                 = args(1)
    val dataPath               = args(2)
    val parsedDestionationPath = args(3)
    val rawDestionationPath    = args(4)

    val spark = SparkSession
      .builder()
      .config("spark.driver.extraJavaOptions", "-Dlog4jspark.root.logger=WARN,console")
      .appName("Parser")
      .master(sparkMaster)
      .getOrCreate()
  }
}

错误的前 2 行显示这是来自 Spark:

Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.mutable.Buffer$.empty()Lscala/collection/GenTraversable; at org.apache.spark.sql.SparkSessionExtensions.(SparkSessionExtensions.scala:72)

进一步的上下文是我在 build.sbt 中使用的依赖项:

scalaVersion in ThisBuild := "2.11.12"
fork in run := true
...
val sparkV          = "2.4.2"
val spark          = "org.apache.spark"           %% "spark-core"              % sparkV
val sparkSql       = "org.apache.spark"           %% "spark-sql"               % sparkV
val sparkHive      = "org.apache.spark"           %% "spark-hive"              % sparkV

最佳答案

简单来说,如果要在本地运行 Spark(v2.4.x),则必须将 Hadoop 指定为 2.6.5。您可以使用任何版本的 AWS Java SDK,但 Hadoop 专门锁定为该版本。如果您希望避免此问题,明智的做法是通过以下两种方式之一将文件上传到 S3:

  • 从您的 JAR 中,使用 TransferManager
    • 在 v1.11.600 中,存在一个错误,导致其使用 org.apache.httpcomponents.httpclient 4.5.8,这可能会导致日志泛滥
  • 使用 aws s3sync 来自 bash 脚本 <-- 推荐

关于java - NoSuchMethodError : scala. collection.mutable.Buffer$.empty()Lscala/collection/GenTraversable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207075/

相关文章:

java - 如何在单个位置修改响应

java - 如何在 Java 中隐藏枚举值?

scala - @tailrec 如何工作

java - 在 Eclipse IDE 中使用 Scala 代码。内部编译器错误

python - 如何在 Django 中管理 Apache Spark 上下文?

sql - 如何选择每组的第一行?

java - Hibernate 集合中的独特项目

java - java中的简单带通滤波器

scala - 使用Spark通过s3a将 Parquet 文件写入s3非常慢

scala - SKEW 连接提示的 Spark Scala 等价物