apache-spark - 如何在 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
在执行代码的节点的类路径中找到所需的及其所有依赖项?
解决方案
JNA 依赖 LD-Library-Path 环境变量来搜索您尝试加载的库。
我通过在集群设置中设置 LD_Library_Path 环境变量解决了这个问题
推荐阅读
- javascript - 如何将组件的状态传递给父级?
- ruby-on-rails - 有没有办法 db:seed 在 Rails 中只有一个表?
- html5-canvas - requestAnimationFrame 动画的基本使用
- javascript - 我无法使用 react-native-ble-plx 创建 BleManager 的新实例
- java - 当文本溢出而不是换行时,TextView 会拉伸 CardView
- c++ - 链接节点列表,分段FAULT
- jquery - 声明或语句预期的 jquery 错误
- ios - 在 App Store Connect 销售/分析仪表板上未显示在 App Purchase 中?
- angular - Ngx-Bootstrap Popover 和 Ngx-popover 名称引用冲突
- php - wp_category 映射:id & name