繁体   English   中英

线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / spark / rdd / RDD

[英]Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD

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

首先,当我尝试运行此代码时,我收到错误“线程中的异常”主“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://)

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

在REPL中保持开发的前沿,并且随着代码片段的变硬,将它们移动到已编译的库中。

因此,示例代码被视为编译库而不是独立应用程序。 您可以通过将编译的JAR传递给--jars属性来使编译的JAR可用于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版本时遇到了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM