我在不同的进程中使用java(arrow-vector
,arrow-memory-unsafe
(和python(pyarrow
(中的Apache Arrow库
我尝试在内存中实现零拷贝DataFrame,但在java库中找不到合适的API来从python中获取箭头向量的内存地址。我在pyarrow
库中发现了API,但在java库中没有。
我需要什么:
- 在java中创建向量,使用箭头作为内存映射API在内存中收集数据
-
在java中获取
VectorSchemaRoot
的内存地址或描述符或字段向量 - 将其传递到python库
pyarrow
- 读取apache箭头矢量数据
我在点上有问题2
你知道我该怎么做吗?非常感谢。
有pyarrow.jvm
模块用于此。以下代码应足以将VectorSchemaRoot
转换为RecordBatch
:
import pyarrow.jvm
vs_root = <VectorSchemaRoot>
rb = pyarrow.jvm.record_batch(vs_root)
如果您有JavaVectorSchemaRoot
对象的Python引用,例如使用jpype
(另请参阅https://uwekorn.com/2020/12/30/fast-jdbc-revisited.html以充分利用JDBC(。
如果使用不同的方法,则需要迭代VectorSchemaRoot
的数组,然后迭代它们的缓冲区,以获得所有缓冲区的单独内存地址。然后,这些可以用于在pyarrow
侧构造Buffer对象,并返回pyarrow.Array
实例。