线程" main"中的例外情况java.lang.NoClassDefFoundError:org / apache / spark / rdd / RDD

时间:2016-05-08 08:44:06

标签: scala apache-spark classpath

请注意,我比程序员更好。 我正在尝试使用Spark"高级分析与Spark"来自作者Sandy Ryza(这些代码示例可以从" https://github.com/sryza/aas")下载, 我遇到了以下问题。 当我在Intelij Idea中打开这个项目并尝试运行它时,我得到错误"线程中的异常" main" java.lang.NoClassDefFoundError:org / apache / spark / rdd / RDD" 有谁知道如何解决这个问题?
这是否意味着我使用了错误版本的spark?

首先,当我尝试运行此代码时,我收到错误"线程中的异常" 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。

1 个答案:

答案 0 :(得分:1)

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

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

  

将开发的前沿保留在REPL中,并作为代码片段   硬化,将它们移动到已编译的库中。

因此,示例代码被视为编译库而不是独立应用程序。您可以通过将已编译的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

但是,如果要将示例代码作为独立应用程序执行并在想法中执行它,则需要修改pom.xml。 编译需要一些依赖项,但在spark运行时环境中可用。因此,这些依赖项使用pom.xml中提供的作用域进行标记。

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

您可以重新制作提供的范围,而不是您可以在想法中运行示例。但你不能再提供这个jar作为火花壳的依赖。

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