如何解决Apache Arrow 在 Python 中以零拷贝从 Java 获取向量
我在 java (arrow-vector
,arrow-memory-unsafe
) 和 python (pyarrow
) 中使用 Apache Arrow 库在不同的进程中
我尝试在内存中实现零拷贝DataFrame,但是我在java库中找不到合适的API来从python获取箭头向量的内存地址。我在 pyarrow
库中发现了该 API,但在 java 库中没有。
我需要什么:
- 在java中创建vector,使用箭头作为内存映射API在内存中收集数据
- 在java中获取
VectorSchemaRoot
或字段向量的内存地址或描述符 - 将其传递给 python 库
pyarrow
- 读取 apache 箭头矢量数据
我有问题2
你知道我该怎么做吗? 谢谢!
解决方法
有 pyarrow.jvm
模块。以下代码应该足以将 VectorSchemaRoot
变成 RecordBatch
:
import pyarrow.jvm
vs_root = <VectorSchemaRoot>
rb = pyarrow.jvm.record_batch(vs_root)
如果您有对 Java VectorSchemaRoot
对象的 Python 引用,这就是它的工作方式,例如通过使用 jpype
(另请参阅 https://uwekorn.com/2020/12/30/fast-jdbc-revisited.html 以充分利用 JDBC)。
如果您使用不同的方法,您将需要遍历 VectorSchemaRoot
的数组,然后遍历它们的缓冲区以获取所有缓冲区的单独内存地址。然后,这些可用于在 pyarrow
端构造 Buffer 对象并返回 pyarrow.Array
实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。