使用带有ScalaObjectMapper的Jackson模块在Spark 1.4.0上运行作业时出错

我正在运行一个用Scala 2.10.4编写并在Spark 1.4.0集群上运行的spark作业(基于HDFS并使用YARN管理)并在Maven存储库上使用Jackson模块版本2.6.1

在我的IDE(IntelliJ IDEA v14)本地运行代码时,一切都在内存群集上运行,但在我的远程群集(AWS VPC上的EMR群集)上运行作业时,我收到以下exception:

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.(JsonParser.scala:14) at com.company.scala.framework.utils.JsonParser$.(JsonParser.scala:14) at com.company.scala.framework.utils.JsonParser$.(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) 

我试图查看网页上的例外,没有运气。 我也尝试在这里找一个类似的问题,发现只有一个线程没有可接受的答案,没有一个答案帮助我。

希望在这里找到帮助,

谢谢。

我正在回答其他用户进一步观看的问题。

我停止使用ScalaObjectMapper并开始使用常规的ObjectMapper

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

它暂时可以正常工作。 附上piggybox的评论是有用的评论:

代码的唯一区别是使用classOf […]指定readValue的类型作为第二个参数。