当前位置: 首页 > 知识库问答 >
问题:

与Azure Java SDK一起使用时,Apache Spark中的Jackson冲突

太叔富
2023-03-14

Azure Synapse在此处发布运行时可用的JAR。我目前正在使用Apache Spark 3.1运行时。

我的项目还依赖于azure eventgrid的1.4.0版本作为依赖项(它引入了azure core)。当作业部署到Synapse上时,我遇到以下错误。

该作业在本地运行良好,但在Synapse上部署时则不行。

21/11/29 17:38:00 INFO Application Master:最终应用程序状态:FAILED,exitCode:15,(原因:用户类抛出异常:java.lang.LinkageError:软件包版本:杰克逊-注释=2.10.0,杰克逊-核心=2.10.0,杰克逊-数据库=2.10.0,杰克逊-数据格式-xml=2.12.5,杰克逊-数据类型-jsr310=2.12.5,azure-core=1.19.0,版本冲突故障排除:https://aka.ms/azsdk/java/dependency/troubleshootcom.azure.core.implementation.jackson.ObjectMapperShim.createXmlMapper(ObjectMapperShim.java:73)在com.azure.core.util.serializer.JacksonAdapter。(JacksonAdapter.java:81)在com.azure.core.util.serializer.JacksonAdapter。(JacksonAdapter.java:58)在com.azure.core.util.serializer.JacksonAdapter$SerializerAdapterHolder。(JacksonAdapter.java:113)在com.azure.core.util.serializer.JacksonAdapter.createDefaultSerializerAdapter(JacksonAdapter.java:122)在com.azure.identity.implementation.标识客户端。(标识Client.java:100)在com.azure.identity.implementation.标识客户端Builder.build(标识客户端B在java. lang.反射中委托方法访问项目。在org. apache. spark.部署. yarn中的方法调用(方法. java: 498)。Application ationMaster$anon2 Dollars. run(Application. scala: 732)由以下原因引起:java. lang。NoSuchMethod odError:com. Fast erxml. jackson. dataformat. xml。XmlMapper.强制配置默认值()Lcom/快速xml/jackson/数据库/cfg/MutableCoercionConfig;在com.快速xml. jackson. dataformat. xml。XmlMapper。(XmlMapper. java: 176)在com.快速xml. jackson. dataformat. xml。XmlMapper。(XmlMapper. java: 145)在com

共有1个答案

郦昆
2023-03-14

Synapse有自己的jar作为其运行时的一部分。项目依赖项需要与运行时可用的jar兼容。

这里有两个部分:

  1. Azure核心进入Jackson依赖项2.12系列。Apache Spark 3.1仍在2.10系列上。
  2. Azure-core已经在synapse(1.16.0)的类路径上可用。因此,拉入的任何azure lib(连同它一起,将azure-core作为依赖项)都需要与azure-core 1.16.0兼容

为了修复(1),我添加了以下内容:

object DependencyOverrides {

  /**
   * We do not have any direct dependency on jackson. Spark relies on 2.10 series and Azure-core sdk has dependency on 2.12.
   * In order to resolve conflicts, we explicitly provide the jackson dependency here to 2.10.5
   */
  val jackson = Seq(
    "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.10.0",
    "com.fasterxml.jackson.core" % "jackson-core" % "2.10.0",
    "com.fasterxml.jackson.core" % "jackson-annotations" % "2.10.0",
    "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.0",
    "com.fasterxml.jackson.dataformat" % "jackson-dataformat-xml" % "2.10.0",
    "com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.10.0",
  )

  val others = Seq(
    "com.google.guava" % "guava" % "27.0-jre"
  )

  val all = jackson ++ others
}

并覆盖SBT中的上述依赖项:

dependencyOverrides ++= DependencyOverrides.all

要修复(2),请在上面的“其他”中添加相关JAR:

  val others = Seq(
    "com.azure" % "azure-core" % "1.16.0",
    "com.azure" % "azure-core-http-netty" % "1.6.2",
    "com.google.guava" % "guava" % "27.0-jre"
  )

在我的例子中,添加azure-core不仅仅是足够的。还必须添加azure-core-超文本传输协议-netty和番石榴。

 类似资料:
  • 服务的Moxy版本的URL返回: MOXy和Jackson版本的Java代码是相同的这是beanparam: 问题似乎在于如何处理types参数。使用Jackson时,类型QueryParams被正确地封送到列表中,但MOXy失败,只返回一个NULL。因此getTypes返回一个空列表。正确处理了简单的QueryParam计数和lang。这是泽西的窃听器还是我需要和莫西做点别的什么? } web.

  • 我试图将Hibernate与我的spring应用程序上下文联系起来。我正在成功地连接SessionFactory,但当我尝试调用getCurrentSession时,我看到以下错误: 我正在配置数据源会话工厂和事务管理器。我还指定了事务处理将是注释驱动的 下面是我的上下文XML: null 下面是我发现错误的类: 当这被称为sessionFactory时不是null,而是带有上述错误的错误。如果我

  • 我有一个带有Spring(5.7.2)Web/Security的REST API项目。 我只有一个表,它包含一个id和一个名称。 当我删除光盘时,我的DiscsService会 当我需要插入或更新时,我会: 我了解到,当您希望在同一事务中使用值(提交之前)时,将使用,并且将同步并清空SQL缓存。 在我的例子中,我看到我在数据库中插入/更新或删除了值。 我应该使用flush()(我认为不应该),但可

  • 我需要做HTTP删除请求到我的服务器与身体提供。 我以以下方式构建改型对象:

  • 问题内容: 我有一个看起来像这样的课: 而且我不想再创建10个类似的类,只是因为我只需要更改一行代码(在这种情况下为@JsonProperty(“ difficulties”))。该属性值取决于类型。可以在一堂课上写吗? 问题答案: 基于Jackson的响应-在运行时修改属性而无需 MichałZiober 进行注释,在这里,我可以通过重写PropertyNamingStrategy来更改默认字段

  • 我有一个烧瓶服务器运行在http://127.0.0.1:5000和一个vuejs前端运行http://localhost:8080我已经做了api,并用postman测试了它,一切都如预期的那样工作:( > 将请求发布到/登录- (将请求发送至/登录)- 烧瓶API代码: 登录。vue: 指数vue 当我使用邮递员登录时,我得到的响应为;当我使用邮递员获取url/索引时,我得到响应。数据但当我使