请注意,我比程序员更擅长数据挖掘。
我正在尝试运行作者 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/