【发布时间】:2021-01-17 20:22:45
【问题描述】:
我正在尝试构建一个简单的基于 Scala 的 Spark 应用程序并在 EMR 中运行它,但是当我运行它时,我得到了Error: Failed to load class: com.myorganization.MyScalaObj。我的 Scala 文件是:
package com.myorganization
import org.apache.spark.sql.SparkSession
object MyScalaObj extends App {
val spark = SparkSession.builder()
.master(("local[*]"))
.appName("myTestApp")
.getOrCreate()
val df = spark.read.csv("s3://my_bucket/foo.csv")
df.write.parquet("s3://my_bucket/foo.parquet")
}
在现有的 build.sbt 文件中,我添加了几行内容,包括 Scala 版本、Spark 库依赖项和 mainClass(我从 this question 找到的。
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")
我构建了这个并获得了一个MyScalaObj.class,我将它手动打包到一个带有jar cf MyScalaObj.jar MyScalaObj.class 的罐子中。我将此复制到运行 Spark 3.0.0 和 Scala 2.12.10 的 EMR 集群。
然后我尝试使用spark-submit --class com.myorganization.MyScalaObj MyScalaObj.jar --deploy-mode cluster --master spark://x.x.x.x 运行我的应用程序,但使用Error: Failed to load class com.myorganization.MyScalaObj. 失败
由于整个过程对我来说很新,我不确定错误是否在我的 sbt 配置中(我根本不知道 sbt),因为 Scala 对象本身缺少某些东西(例如,清单?),或者我如何调用 Spark。我的错误的可能原因是什么?
【问题讨论】:
-
您是否将文件复制到 hdfs 或只是本地?指定文件位置。
标签: scala apache-spark sbt