我试图使用Java API为Apache箭头连接到内存存储。我已经在Python这样做,成功后,按照指导here使用Python API。
我也看了看C++ API documentation,但它并没有多大帮助。
The Java Docs使它看起来类似于其他文档。
然而,尝试使用以下行的时候,我得到一个UnsatisfiedLinkError,我无法找到阿帕奇箭文档中的任何引用。发现谷歌的其他解决方案(如呼叫System.load)都没有成功要么。
PlasmaClient client = new PlasmaClient("/tmp/plasma", "", 0);
我的错误消息的副本可以看到下面:
Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.arrow.plasma.PlasmaClientJNI.connect(Ljava/lang/String;Ljava/lang/String;I)J at org.apache.arrow.plasma.PlasmaClientJNI.connect(Native Method) at org.apache.arrow.plasma.PlasmaClient.<init>(PlasmaClient.java:44) at plas.main(plas.java:11)
任何帮助表示赞赏。谢谢!
它已经有一段时间,因为我是这样做,但这个问题很简单,但不容易找到。在测试程序,你可以找到一个重要的一行:
System.loadLibrary("plasma_java");
val plasmaClient = new PlasmaClient("/tmp/plasma","",0);
编译在C进行C ++扩展的选项libplasma_java.so
时创建的共享库-DARROW_PLASMA_JAVA_CLIENT=on
。在arrow/java/plasma/test.sh
文件,你可以找到整个生成命令,但这是从该文件中派生一个:
cd arrow/cpp
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-g -O3" \
-DCMAKE_CXX_FLAGS="-g -O3" \
-DARROW_BUILD_TESTS=off \
-DARROW_HDFS=on \
-DARROW_BOOST_USE_SHARED=on \
-DARROW_PYTHON=on \
-DARROW_PLASMA=on \
-DPLASMA_PYTHON=on \
-DARROW_JEMALLOC=off \
-DARROW_WITH_BROTLI=off \
-DARROW_WITH_LZ4=off \
-DARROW_WITH_ZLIB=off \
-DARROW_WITH_ZSTD=off \
-DARROW_PLASMA_JAVA_CLIENT=on \
..
make VERBOSE=1 -j4
make install
我只是跑它并根据需要它内置了全部。如果你想安装的地方简单地添加前缀-DCMAKE_INSTALL_PREFIX=/home/myuser/install-here
。
如果您运行如果System.loadLibrary("plasma_java")
可以某处你的系统上找到.so
它仅适用(例如东西通常是在Linux环境变量LD_LIBRARY_PATH
指定)。注意,这也需要在系统路径libplasma.so
和libarrow.so
为好。