如何在 Azure Databricks 中的 spark worker 上部署 jar 依赖项(本机 dll)?

How to deploy jar dependencies (native dlls) on spark workers in Azure Databricks?

我正在编写一个 Java 包装器 TnHandler.java,它使用 JNA,并调用 mycustom.so 本机库,它有其他依赖文件。我将我的 java 应用导出为可运行的 jar 并安装在 Azure 数据块集群中。

在 PySpark 中,我在 Databricks 的 PyPark 笔记本中这样称呼我的 jar

from py4j.java_gateway import java_import
java_import(sc._gateway.jvm,"")

jvm = sc._gateway.jvm
java_import(jvm, "*")

foo = jvm.TnHandler()
def applyTn(s):
  return foo.dummyTn(s)

applyTn("give me ")`

我一直收到这个错误java.lang.UnsatisfiedLinkError: Unable to load library 'mycustom.so': libmycustom.so: cannot open shared object file: No such file or directory

我认为原因是 .so 文件及其所有依赖项在执行代码的工作节点中不存在。

如何确保在执行代码的每个节点的 class 路径中找到所需的 .so 及其所有依赖项?

JNA 依靠 LD-Library-Path 环境变量来搜索您尝试加载的库。

我通过在集群设置中设置 LD_Library_Path 环境变量解决了这个问题