如何在AWS Glue中使用Jackson依赖项

时间:2018-05-31 20:14:39

标签: scala jackson aws-glue

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

包括杰克逊的情况

set

错误是

set

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

如果杰克逊被排除在外

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/825d66e2148d688e274eb36c99c18a89

1 个答案:

答案 0 :(得分:0)

AWS Glue带来了Jackson依赖关系,我不知道哪个版本。您可以检查glue-assembly.jar内容 - here's how to get it

问题是你的程序集和glue-assembly都会在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 ++= ...
  )