首页 > 解决方案 > EMR 总是给我找不到 Scala 应用程序的类

问题描述

您好,我想测试 EMR 自定义步骤功能。
我创建了一个简单的 2 类 Scala 应用程序,它在 S3 上写入一个文本文件。
这里是树

   ├───src
       ├───main
       │   └───scala
       │       └───com
       │           └───myorg
                        -S3Lister.scala
                        -FindMaxDate.scala
       └───test
           └───scala
               └───samples

在构建包后,mvn package我将其提交给 emr,指定为 main class com.myorg.FindMaxDate。但是它总是给我这个错误:
Caused by: java.lang.ClassNotFoundException: scala.Function1
知道这个错误可能是什么原因造成的吗?
我已经使用了原型:net.alchim31.maven:scala-archetype-simple version: 1.6 谢谢

这是我的主要课程:

object FindMaxDate {

  def main(args : Array[String]) {

    val date_pattern = "\\d{8}".r
    val date_format = new SimpleDateFormat("yyyyMMdd")
    var objectList: List[S3ObjectSummary] = S3Lister.listObjectsInBucket("mycloud-unzipped","sociodemos")

    val sum: scala.collection.immutable.List[Date] = objectList.asScala
                                    .map(file => date_pattern.findFirstIn(file.getKey()))
                                    .map(date => date.getOrElse(null))
                                    .filter(date => date != null)
                                    .map(date => date_format.parse(date)).toList

    S3Lister.writebjectToS3("max_date:" + sum.max + "\n min_date:" + sum.min + "\n",
    "mycloud-source","dates.txt","sociodemos")
  }
}

以下是依赖项:

<dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-s3</artifactId>
      <version>1.11.550</version>
    </dependency> ... below there are all the default ones for testing

标签: scalajarargumentsamazon-emr

解决方案


EMR 5.24.0有 Spark 2.4.2,据说默认使用 Scala 2.12,但 AWS 仍然提供仅针对 Scala 2.11 编译的 Spark 版本,此时他们至少应该提供一个配置标志来为 Scala 选择 Spark 版本2.12


推荐阅读