EMR всегда дает мне класс не найден для приложения Scala - PullRequest
0 голосов
/ 13 мая 2019

Привет! Я хотел проверить функцию пользовательского шага 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 ]

3 голосов
/ 13 июня 2019

EMR 5.24.0 имеет Spark 2.4.2 , который предположительно использует Scala 2.12 по умолчанию, но AWS все еще выпускает версию Spark, скомпилированную только для Scala 2.11, к этому времени онидолжен был по крайней мере предоставить флаг конфигурации, чтобы выбрать версию Spark для Scala 2.12

1 голос
/ 15 мая 2019

Самая последняя версия EMR в это время (май 2019 г.) - 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+. Для API Scala 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+. Для API Scala Spark 2.4.3 использует Scala 2.12. Вам потребуется использовать совместимую версию Scala (2.12.x).

...