【问题标题】:Spark can't find Guava ClassesSpark 找不到 Guava 类
【发布时间】:2016-02-10 05:18:22
【问题描述】:

我正在运行 Spark 的名为 JavaPageRank 的示例,但它是我在新 jar 中使用 maven 单独编译的副本。我不断收到此错误:

错误SparkUncaughtExceptionHandler:线程线程中未捕获的异常[执行器任务启动worker-0,5,main] java.lang.NoClassDefFoundError: com/google/common/collect/Iterables

尽管 guava 被列为 Spark 的依赖项之一。我正在运行已编译的 Spark 1.6,它是我从 apache 网站下载的预编译版本。

谢谢!

【问题讨论】:

    标签: maven apache-spark guava


    【解决方案1】:

    错误表示包含 com.google.common.collect.Iterables 类的 jar 不在类路径中。因此,您的应用程序无法在运行时找到所需的类。

    如果您使用的是 maven/gradle ,请尝试清理、构建和刷新项目。然后检查您的 classes 文件夹并确保 guava jar 在 lib 文件夹中。 希望这会有所帮助。

    祝你好运!

    【讨论】:

    • 嗨!谢谢你这么快回复。但我没有自己编译 spark 源 - 如果我使用预构建版本,这个问题是否仍然存在?
    • 好的,如果我理解正确,您使用的是 Spark 包本身中的示例。如果是,那么很可能没有构建 spark 包可能是问题所在。您需要在运行和使用其中的任何内容之前构建包本身。运行“mvn -DskipTests clean package”来构建你的 spark 包。类似于这里提出的问题stackoverflow.com/questions/27618843/…希望这会有所帮助。
    • 我只是从 spark 复制一个示例并将其编译到另一个外部 jar 中,并进行了非常小的更改。我想基于已经编译的 spark 运行这个 jar。当我直接从编译的 spark 运行示例时,它不会出错。但是当我使用我的外部 jar 时它确实给出了这个错误。
    • 抱歉我的回复晚了。您的示例使用的是 Spark 库和 API,对吗?当您使用已编译的 Spark 时,Spark 需要的所有源和库都已就位,因此您不会看到错误。当您在外部 jar 中运行它时,您必须确保在 maven/gradle 中配置了所有需要的依赖项,或者......您的 pom.xml 中有这些依赖项吗?您是否尝试过构建您的外部应用程序?
    • 我已经尝试将 spark-core 和 guava 列为我在 maven 中的依赖项。即使我确实将番石榴列为依赖项,我也会得到同样的错误。这就是我的依赖项的样子<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2015-02-26
    • 2018-10-24
    相关资源
    最近更新 更多