如何解决scala对象emr上spark3“加载类失败”的问题

h6my8fg2  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(371)

我试图构建一个简单的基于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")
}

在stock build.sbt文件中,我添加了几行内容,包括scala版本、spark库依赖项和 mainClass (这是我从这个问题中发现的。

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里 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的方式中丢失了什么(例如,清单?)。我犯错误的可能原因是什么?

4sup72z8

4sup72z81#

我的问题在于如何构建jar文件。由于多年没有使用java,我忘记了限定类名——在本例中, com.myorganization.MyScalaObj --需要反映在目录结构中。我在跑步 jar cf MyScalaObj.jar MyScalaObj.class ,但我应该在两个目录上运行 jar cf MyScalaObj.jar com/ .

相关问题