【问题标题】:How to use Jackson dependency with AWS Glue如何将 Jackson 依赖项与 AWS Glue 结合使用
【发布时间】:2018-11-10 22:15:33
【问题描述】:

我尝试在 AWS Glue 作业中使用 https://github.com/snowplow/scala-maxmind-iplookups 库。我使用https://github.com/sbt/sbt-assembly 来创建包含所有依赖项的 jar。

包含杰克逊的情况

dependencyOverrides ++= Seq(
  "com.fasterxml.jackson.core" % "jackson-core" % "2.9.3",
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.9.3",
  "com.fasterxml.jackson.core" % "jackson-annotations" % "2.9.3",
)

错误是

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.9.3

完整日志https://gist.github.com/pawaclawczyk/81844b5063d998acd3528f136c7a01f5

如果杰克逊被排除在外

excludeDependencies ++= Seq(
  ExclusionRule("com.fasterxml.jackson.core")
)

错误是

ERROR ApplicationMaster: User class threw exception: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V

完整日志https://gist.github.com/pawaclawczyk/825d66e2148d688e274eb36c99c18a89

【问题讨论】:

    标签: scala jackson aws-glue


    【解决方案1】:

    AWS Glue 在 Jackson 依赖项上带来了它,不过我不确定是哪个版本。您可以检查glue-assembly.jar 的内容-here's how to get it

    问题是您的程序集和胶合程序集最终都位于 Spark 执行器上的相同类路径中。

    在使用 Google Big Query Connector(主要是 jackson 和 guava)时,我的项目中的库不兼容也遇到了同样的问题,我通过像这样在我的程序集 jar 中对这些库进行着色解决了这个问题:

    lazy val root = (project in file(".")).
      settings(
        ...,
        assemblyShadeRules in assembly := Seq(
          ShadeRule.rename("com.fasterxml.**" -> "my.shaded.@0").inAll,
          // other shade rules
        ),
        libraryDependencies ++= ...
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2019-09-22
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多