scala - 线程 "main"java.lang.NoClassDefFoundError : org/apache/spark/rdd/RDD 中出现异常

标签 scala apache-spark classpath

请注意,我比程序员更擅长数据挖掘。 我正在尝试运行作者 Sandy Ryza 所著的《Advanced Analytics with Spark》一书中的示例(这些代码示例可以从“https://github.com/sryza/aas”下载), 我遇到了以下问题。 当我在 Intelij Idea 中打开这个项目并尝试运行它时,出现错误“Exception in thread "main"java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD” 有谁知道如何解决这个问题?
这是否意味着我使用了错误版本的 Spark ?

首先,当我尝试运行此代码时,出现错误“Exception in thread "main"java.lang.NoClassDefFoundError: scala/product”,但我通过将 scala-lib 设置为在 maven 中编译来解决它。 我使用 Maven 3.3.9、Java 1.7.0_79 和 scala 2.11.7 、spark 1.6.1。我尝试了 Intelij Idea 14 和 15 个不同版本的 java (1.7)、scala (2.10) 和 Spark,但没有成功。 我也在使用Windows 7。 我的 SPARK_HOME 和 Path 变量已设置,我可以从命令行执行 Spark-shell。

最佳答案

本书中的示例将显示 Sparkshell 的 --master 参数,但您需要指定适合您的环境的参数。如果您没有安装 Hadoop,则需要在本地启动 Spark-Shell。要执行示例,您只需将路径传递到本地文件引用 (file:///),而不是 HDFS 引用 (hdfs://)

作者提出了一种混合开发方法:

Keep the frontier of development in the REPL, and, as pieces of code harden, move them over into a compiled library.

因此,示例代码被视为已编译的库,而不是独立的应用程序。您可以通过将编译后的 JAR 传递给 --jars 属性来使 Spark-Shell 可以使用它,而 maven 用于编译和管理依赖项。

在书中,作者描述了如何执行 simplesparkproject:

使用maven编译打包项目

cd simplesparkproject/
mvn package 

使用 jar 依赖项启动 Spark-shell

spark-shell --master local[2] --driver-memory 2g --jars ../simplesparkproject-0.0.1.jar ../README.md

然后您可以在 Spark-Shell 中访问您的对象,如下所示:

val myApp = com.cloudera.datascience.MyApp

但是,如果您想将示例代码作为独立应用程序执行并在idea中执行,则需要修改pom.xml。 一些依赖项是编译所必需的,但在 Spark 运行时环境中可用。因此,这些依赖项被标记为 pom.xml 中提供的范围。

<!--<scope>provided</scope>-->

您可以重新制作提供的范围,然后您将能够在 idea 中运行示例。但是您不能再提供此 jar 作为 Spark shell 的依赖项。

注意:使用 maven 3.0.5 和 Java 7+。我在使用 Maven 3.3.X 版本和插件版本时遇到问题。

关于scala - 线程 "main"java.lang.NoClassDefFoundError : org/apache/spark/rdd/RDD 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097928/

相关文章:

hadoop - Apache Spark 上的 AMPLab 鲨鱼

mysql - 使用 SPARK 更新 MySQL 行

java - Apache Spark Dataframe 如何在使用 groupBy 时关闭部分聚合?

java - Applet 依赖 JAR 在 MANIFEST.MF 中具有不兼容的类路径

java - 类文件不运行

scala - 如何使用 testng、slf4s 和 logback 在 scala 单元测试中进行日志记录

scala - 如何提高基于 String 或 Double 的值的类型安全性?

ant - 是否有一种简单的方法可以在 Ant junit 或 java 任务的类路径中使用 OSGi 包?

java - 计算字符串中的同构循环移位

scala - Int 类型与 scala.Int 类型