Apache Arrow在Python中从Java中获取向量,并且没有任何副本



我在不同的进程中使用java(arrow-vectorarrow-memory-unsafe(和python(pyarrow(中的Apache Arrow库

我尝试在内存中实现零拷贝DataFrame,但在java库中找不到合适的API来从python中获取箭头向量的内存地址。我在pyarrow库中发现了API,但在java库中没有。

我需要什么:

  1. 在java中创建向量,使用箭头作为内存映射API在内存中收集数据
  2. 在java中获取VectorSchemaRoot的内存地址或描述符或字段向量
  3. 将其传递到python库pyarrow
  4. 读取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实例。

相关内容

最新更新