相关疑难解决方法(0)

使用带有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群集)上运行作业时,我遇到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

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

希望在这里找到帮助,

谢谢.

java scala intellij-idea jackson apache-spark

12
推荐指数
1
解决办法
1479
查看次数

Spark:广播杰克逊ObjectMapper

我有一个spark应用程序,它从文件中读取行并尝试使用jackson对它们进行反序列化.为了使这段代码能够工作,我需要在Map操作中定义ObjectMapper(否则我得到一个NullPointerException).

我有以下代码正在工作:

val alertsData = sc.textFile(rawlines).map(alertStr => {
      val mapper = new ObjectMapper()
      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      mapper.registerModule(DefaultScalaModule)
      broadcastVar.value.readValue(alertStr, classOf[Alert])
    })
Run Code Online (Sandbox Code Playgroud)

但是,如果我在地图外部定义映射器并对其进行广播,则会因NullPointerException而失败.

此代码失败:

val mapper = new ObjectMapper()
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
    mapper.registerModule(DefaultScalaModule)
    val broadcastVar = sc.broadcast(mapper)

    val alertsData = sc.textFile(rawlines).map(alertStr => {
      broadcastVar.value.readValue(alertStr, classOf[Alert])
    })
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

谢谢,Aliza

scala jackson apache-spark

2
推荐指数
1
解决办法
1871
查看次数

标签 统计

apache-spark ×2

jackson ×2

scala ×2

intellij-idea ×1

java ×1