Scala 在Intellij中设置H20依赖项并在spark submit上运行

Scala 在Intellij中设置H20依赖项并在spark submit上运行,scala,intellij-idea,h2o,Scala,Intellij Idea,H2o,我想在spark上启动一个使用h20库的jar。我在intellij上创建了一个scala项目,并在src/scala中添加了一个包com.hw。然后我编写了一个简单的Scala程序 这是sbt文件 name := "h20prova" version := "1.0" scalaVersion := "2.12.1" libraryDependencies ++= Seq( "org.apache.spark" % "spark-core_2.10" % "1.5.1", "ai.h2o"%"

我想在spark上启动一个使用h20库的jar。我在intellij上创建了一个scala项目,并在src/scala中添加了一个包com.hw。然后我编写了一个简单的Scala程序

这是sbt文件

name := "h20prova"
version := "1.0"
scalaVersion := "2.12.1"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.10" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")
项目可以毫无问题地查看其库

我创建了一个指定主类com.hw.h20try的工件,并成功地构建了该工件

然后我用这个命令在spark上启动了脚本

spark-submit --class "com.hw.h20try" h20prova.jar
并得到以下错误

java.lang.ClassNotFoundException: com.hw.h20try
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:695)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我非常确定这是一个依赖性问题,因为我在使用Java时遇到了一个类似的问题,我通过将编译好的jar添加到工件构建中解决了这个问题。但我似乎无法重现我在Scala上用Java所做的一切

还有另一种方法可以在几分钟内设置Scala项目并在Spark上运行?

您的Scala版本(2.12.1)和软件包版本(2.10、2.11)不匹配。 scala 2.12版不支持spark

scalaVersion := "2.12.1"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.10" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")
因此,您的依赖关系应该是这样的(如果您选择scala 2.11版)

并注册
java.lang.ClassNotFoundException:com.hw.h20try
exception,确保您已使用插件(如)创建了具有依赖项的uber jar


运行命令
jar-tf h20prova.jar | grep h20try
检查该类是否已打包并在jar中可用。

更新:在sbt构建项目的MANIFEST.MF文件中,声明未找到com.hw.h20try,但我不明白为什么在jar上运行该命令并找到这些文件:com/hw/h20try$.class,com/hw/h20try.class,src/main/scala/com/hw/h20try.scala,但仍然得到ClassNotFoundException
scalaVersion := "2.11.5"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "1.5.1",
"ai.h2o"%"sparkling-water-core_2.11"%"2.1.9")