调整类路径/在Azure Databricks中更改Spring版本

问题描述

我正在尝试在Azure Databricks中使用Apache Spark / Ignite集成。我使用Databricks UI安装 org.apache.ignite:ignite-spark-2.4:2.9.0 maven库。而且在访问我的点火开关时出现错误

: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.clearCache()V
        at org.springframework.context.support.AbstractApplicationContext.resetCommonCaches(AbstractApplicationContext.java:907)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:567)

此处AbstractApplicationContext是使用不同春季版本的ReflectionUtils编译的。

我看到 spring-core-4.3.26.RELEASE.jar / dbfs / FileStore / jars / maven / org / springframework 中安装了strong> org.apache.ignite:ignite-spark-2.4:2.9.0 安装,并且 / dbfs / FileStore / jars

下没有其他春季版本的jar

但是似乎数据块内部使用了spring-core__4.1.4。

%sh
ls /databricks/jars | grep spring

打印:

spark--maven-trees--spark_2.4--com.clearspring.analytics--stream--com.clearspring.analytics__stream__2.7.0.jar
spark--maven-trees--spark_2.4--org.springframework--spring-core--org.springframework__spring-core__4.1.4.RELEASE.jar
spark--maven-trees--spark_2.4--org.springframework--spring-test--org.springframework__spring-test__4.1.4.RELEASE.jar

我不是Java程序员,所以我没有解决此类冲突的经验。

是否可以以某种方式调整databricks类路径或以其他方式解决此问题?

调整类路径可能很容易,但是我不知道如何。我只是在databricks文档中看到一句话,它可以更改init-script中的类路径。我可以创建一个init脚本,之前已经做过,但是我到底应该怎么做?

我尝试了不同的databricks运行时版本,目前尝试使用6.6。我认为Apache Ignite与spark 3没有集成。

解决方法

在链接https://kb.databricks.com/libraries/replace-default-jar-new-jar.html之后,我创建了初始化脚本,如下所示:

npx http-server

此后,我在群集上注册了此初始化脚本,并且ignite集成为我工作(org.apache.ignite:ignite-spark-2.4:2.9.0,ignite 2.9.0,azure databricks 6.6)

/ databricks / jars下预装了大约500个jar文件,可能我破坏了一些依赖关系,但没有注意到我的任务的某些副作用。