首页 > 解决方案 > 如何在 Azure Databricks 中的 spark 工作人员上部署 jar 依赖项(本机 dll)?

问题描述

我正在编写一个TnHandler.java使用 JNA 并调用mycustom.so本机库的 Java 包装器,它具有其他依赖文件。我将我的 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 $20")`

我不断收到此错误java.lang.UnsatisfiedLinkError: Unable to load library 'mycustom.so': libmycustom.so: cannot open shared object file: No such file or directory

我认为原因是.so文件,并且它的所有依赖项都不存在于正在执行代码的工作节点中。

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

标签: apache-sparkpysparkjnadatabricks

解决方案


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

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


推荐阅读