Ошибка при запуске задания на Spark 1.4.0 с модулем Jackson с помощью ScalaObjectMapper

Я запускаю искровое задание, написанное в Scala 2.10.4, и работаю на кластере Spark 1.4.0 (на основе HDFS и управляется YARN) и с использованием модулей Jackson версии 2.6.1 в репозитории Maven

При запуске кода локально из моей IDE (IntelliJ IDEA v14) все работает на кластере на памяти, но при выполнении задания на удаленном кластере (кластер EMR на AWS VPC) я получаю следующее исключение:

java.lang.AbstractMethodError: com.company.scala.framework.utils.JsonParser$$anon$1.com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$_setter_$com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$$typeCache_$eq(Lorg/spark-project/guava/cache/LoadingCache;)V
    at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.$init$(ScalaObjectMapper.scala:50)
    at com.company.scala.framework.utils.JsonParser$$anon$1.<init>(JsonParser.scala:14)
    at com.company.scala.framework.utils.JsonParser$.<init>(JsonParser.scala:14)
    at com.company.scala.framework.utils.JsonParser$.<clinit>(JsonParser.scala)
    at com.company.migration.Migration$.printAllKeys(Migration.scala:21)
    at com.company.migration.Main$$anonfun$main$1.apply(Main.scala:22)
    at com.company.migration.Main$$anonfun$main$1.apply(Main.scala:22)
    at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
    at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:199)
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:56)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:70)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
    at org.apache.spark.scheduler.Task.run(Task.scala:70)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Я попытался просмотреть веб-сайт для исключения и не повезло. Я также попытался найти аналогичный вопрос здесь и нашел только один поток без приемлемого ответа, и ни один из ответов не помог мне там.

Надеюсь найти помощь здесь,

Спасибо.

Ответ 1

Я отвечаю на вопрос о других мнениях других пользователей.

Я прекратил использовать ScalaObjectMapper и начал работать с обычным ObjectMapper.

val jacksonMapper = new ObjectMapper() 
jacksonMapper.registerModule(DefaultScalaModule)

И он работает отлично. Прикрепление комментария piggybox, чтобы быть полезным комментарием:

Единственное отличие в коде - использовать classOf [...] для указания типа для readValue как второй параметр.