Mak*_*e42 16 scala apache-spark
我将https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/ml/RandomForestClassifierExample.scala复制到一个新项目并设置build.sbt
name := "newproject"
version := "1.0"
scalaVersion := "2.11.8"
javacOptions ++= Seq("-source", "1.8", "-target", "1.8")
scalacOptions += "-deprecation"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "2.0.0" % "provided",
"org.apache.spark" % "spark-sql_2.11" % "2.0.0" % "provided",
"org.apache.spark" % "spark-mllib_2.11" % "2.0.0" % "provided",
"org.jpmml" % "jpmml-sparkml" % "1.1.1",
"org.apache.maven.plugins" % "maven-shade-plugin" % "2.4.3",
"org.scalatest" %% "scalatest" % "3.0.0"
)
Run Code Online (Sandbox Code Playgroud)
我可以从IntelliJ 2016.2.5构建它,但是当我收到错误时我
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
at org.apache.spark.examples.ml.RandomForestClassifierExample$.main(RandomForestClassifierExample.scala:32)
at org.apache.spark.examples.ml.RandomForestClassifierExample.main(RandomForestClassifierExample.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
Run Code Online (Sandbox Code Playgroud)
我甚至可以点击SparkSession并获得源代码.问题是什么?
Thi*_*ilo 22
当你说provided你的依赖项时,构建将针对该依赖项进行编译,但它不会在运行时添加到类路径中(假设它已经存在).
这是构建Spark作业时的正确设置spark-submit(因为它们将在提供依赖关系的Spark容器内运行,并且第二次包含它会导致麻烦).
但是,当您在本地运行时,您需要存在该依赖项.因此,要么将构建更改为不具有此功能provided(但是在构建提交作业时需要调整它),或者在IDE中将运行时类路径配置为已具有该jar文件.
就我而言,我使用的是本地 Cloudera CDH 5.9.0 集群,默认情况下安装了 Spark 1.6.1,并将 Spark 2.0.0 作为包裹安装。因此,spark-submit使用 Spark 1.6.1 而使用spark2-submitSpark 2.0.0。由于1.6.1中不存在SparkSession,所以抛出了这个错误。使用正确的spark2-submit命令解决了问题。
| 归档时间: |
|
| 查看次数: |
18136 次 |
| 最近记录: |