如何解决;未能加载类“;使用Scala对象的EMR上的Spark 3

如何解决;未能加载类“;使用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

我试图构建一个简单的基于Scala的Spark应用程序,并在EMR中运行它,但当我运行它时,我得到
错误:未能加载类: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")