如何解决;未能加载类“;使用Scala对象的EMR上的Spark 3
我试图构建一个简单的基于Scala的Spark应用程序,并在EMR中运行它,但当我运行它时,我得到如何解决;未能加载类“;使用Scala对象的EMR上的Spark 3,scala,apache-spark,sbt,Scala,Apache Spark,Sbt,我试图构建一个简单的基于Scala的Spark应用程序,并在EMR中运行它,但当我运行它时,我得到错误:未能加载类:com.myorganization.myscalobj。我的Scala文件是: package com.myorganization 导入org.apache.spark.sql.SparkSession 对象myscalobj扩展应用程序{ val spark=SparkSession.builder() .master((“本地[*]”) .appName(“myTestAp
错误:未能加载类:com.myorganization.myscalobj
。我的Scala文件是:
package com.myorganization
导入org.apache.spark.sql.SparkSession
对象myscalobj扩展应用程序{
val spark=SparkSession.builder()
.master((“本地[*]”)
.appName(“myTestApp”)
.getOrCreate()
val df=spark.read.csv(“s3://my_bucket/foo.csv”)
df.write.parquet(“s3://my\u bucket/foo.parquet”)
}
在stock build.sbt文件中,我添加了几行内容,包括Scala版本、Spark库依赖项和mainClass
(我从中找到)
我构建了它,得到了一个myscalobj.class
,我正在用jar cf myscalobj.jar myscalobj.class
手动将它打包到一个jar中。我将它复制到运行Spark 3.0.0和Scala 2.12.10的EMR集群中
然后,我尝试使用spark submit--class com.myorganization.myscalobj myscalobj.jar--deploy mode cluster--master运行我的应用程序spark://x.x.x.x
,但失败,错误为:未能加载com.myorganization.myscalobj类。
由于这整个过程对我来说都是全新的,我不确定这个错误是否在我的sbt配置(我根本不知道sbt)中,因为Scala对象本身缺少一些东西(例如,清单?),或者我如何调用Spark。我的错误可能是什么原因?事实证明,我的问题在于如何构建jar文件。多年没有使用Java,我忘记了限定类名——在本例中,
com.myorganization.myscalobj
——需要反映在目录结构中。我正在运行>jar cf myscalobj.jar myscalobj.class
,但我应该在两个目录中运行jar cf myscalobj.jar com/
,结果我的问题在于如何构建jar文件。多年没有使用Java,我忘记了限定的类名——在本例中,com.myorganization.myscalobj
——needs将反映在目录结构中。我运行的是jar cf myscalobj.jar myscalobj.class
,但我应该在两个目录中运行jar cf myscalobj.jar com/
是否将文件复制到hdfs或仅本地?指定文件位置。是否将文件复制到hdfs或仅本地?指定文件位置。
name := "sbtproj"
version := "0.1"
scalaVersion := "2.12.10"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "3.0.0",
"org.apache.spark" %% "spark-sql" % "3.0.0"
)
mainClass in (Compile, run) := Some("com.myorganization.MyScalaObj")