EMR总是给我Scala应用程序找不到类

时间:2019-05-13 13:25:55

标签: scala jar arguments amazon-emr

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

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

使用mvn package构建软件包后,我将其提交给emr并指定为主类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

2 个答案:

答案 0 :(得分:3)

EMR 5.24.0的Spark 2.4.2应该默认使用Scala 2.12,但是AWS仍然仅针对Scala 2.11发行了Spark版本,此时,他们应该至少提供了config标志为Scala 2.12选择一个Spark版本

答案 1 :(得分:0)

当前(2019年5月)的EMR最新版本为5.23.0,并且仍使用Spark 2.4.0(https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-5x.html#emr-5200-release

https://spark.apache.org/docs/2.4.0/

  

Spark可在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上运行。对于Scala API,   Spark 2.4.0使用Scala 2.11。您将需要使用兼容的Scala   版本(2.11.x)。

我相信对Scala 2.12.X的非实验支持仅在Spark 2.4.3中添加,而EMR尚不可用:https://spark.apache.org/docs/2.4.3/

  

Spark可在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上运行。对于Scala API,   Spark 2.4.3使用Scala 2.12。您将需要使用兼容的Scala   版本(2.12.x)。