gpt4 book ai didi

json - Spark 运行错误 java.lang.NoClassDefFoundError : org/codehaus/jackson/annotate/JsonClass

转载 作者:行者123 更新时间:2023-12-01 23:23:04 24 4
gpt4 key购买 nike

import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import play.api.libs.json._
import java.util.Date
import javax.xml.bind.DatatypeConverter
object Test {
def main(args:Array[String]): Unit = {
val logFile="test.txt"
val conf=new SparkConf().setAppName("Json Test")
val sc = new SparkContext(conf)
try {
val out= "output/test"
val logData=sc.textFile(logFile,2).map(line => Json.parse(cleanTypo(line))).cache()

} finally {
sc.stop()
}
}

既然说到了 Spark jackson 冲突问题,我就重新构建了 Spark 使用
mvn 版本:use-latest-versions -Dincludes=org.codehaus.jackson:jackson-core-asl
mvn 版本:use-latest-versions -Dincludes=org.codehaus.jackson:jackson-mapper-asl

所以 jar 已经更新到 1.9.x
但我仍然有错误
15/03/02 03:12:19 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.NoClassDefFoundError: org/codehaus/jackson/annotate/JsonClass
at org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector.findDeserializationType(JacksonAnnotationIntrospector.java:524)
at org.codehaus.jackson.map.deser.BasicDeserializerFactory.modifyTypeByAnnotation(BasicDeserializerFactory.java:732)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:427)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:398)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:307)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:287)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:136)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:157)
at org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2468)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2383)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1094)
at play.api.libs.json.JacksonJson$.parseJsValue(JsValue.scala:477)
at play.api.libs.json.Json$.parse(Json.scala:16)

最佳答案

我们遇到了几乎完全相同的问题。我们试图使用 1.9.2 但也遇到了没有这样的方法错误。

令人讨厌的是,不仅要处理 1 个版本冲突,还要处理 2 个版本冲突。首先,Spark 依赖于 Hadoop(对于 hdfs),它依赖于 jackson json 的 1.8.x 版本,这就是您所看到的冲突。 Spark(至少 1.2+)然后使用 jackson 2.4.4 核心,该核心实际上已移至 com.fasterxml.jackson.core,因此由于包名称不同,它实际上与 1.8.x 并不冲突。

因此,在您的情况下,如果您执行以下 3 件事之一,您的代码应该可以正常工作:

  • 升级到小于或等于 2.4.4 的 2.4.x 版本,因为实际依赖项将被 2.4.4(在撰写本文时)的 sparks 替换
  • 降级到 1.8.x,低于或等于 hadoop 使用的 1.8.x 版本
  • 在 1.9.x 版本下编译 spark。我知道您提到了这一点并且它没有用,但是当我们尝试它时它成功了,我们使用选项 -Dcodehaus.jackson.version=1.9.2
  • 运行构建

    不幸的是,由于 spark 的性质以及它已经在类路径上拥有自己的所有内部依赖关系,因此将会有更多类似的问题出现,因此任何冲突的作业依赖关系都不会解决。 Spark 已经做了一些依赖阴影来避免像 guava 这样的包出现这个问题,但目前 jackson 还没有做到这一点。

    关于json - Spark 运行错误 java.lang.NoClassDefFoundError : org/codehaus/jackson/annotate/JsonClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806356/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com