我在java中使用apachearrow库( arrow-vector
, arrow-memory-unsafe
)还有Python( pyarrow
).
我尝试在内存中实现零拷贝Dataframe,但在java库中找不到合适的api来从python获取箭头向量的内存地址。我在你的电脑里找到了那个api pyarrow
库,但不在java库中。
我需要的是:
在java中创建向量,使用arrow作为内存Mapapi在内存中收集数据
获取的内存地址或描述符 VectorSchemaRoot
或java中的字段向量
将其传递给python库 pyarrow
读取apache箭头矢量数据
我在第二点有问题
你知道我怎么做吗?谢谢您!
1条答案
按热度按时间qvk1mo1f1#
这就是
pyarrow.jvm
这个模块。以下代码应足以使VectorSchemaRoot
变成一个RecordBatch
:如果您有一个对java的python引用,那么它就是这样工作的
VectorSchemaRoot
对象,例如使用jpype
(另见https://uwekorn.com/2020/12/30/fast-jdbc-revisited.html 为了充分利用jdbc)。如果使用不同的方法,则需要迭代
VectorSchemaRoot
然后对它们的缓冲区进行排序,得到所有缓冲区的单个内存地址。然后可以使用这些对象在服务器上构造缓冲区对象pyarrow
作为回报pyarrow.Array
示例。