请注意,我比程序员更好的数据.
我试图从作者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://)
作者提出了一种混合开发方法:
Keep the frontier of development in the REPL, and, as pieces of code
harden, move them over into a compiled library.
因此,示例代码被视为编译库而不是独立应用程序.您可以通过将编译的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版本时遇到了问题.