微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apache Arrow 在 Python 中以零拷贝从 Java 获取向量

如何解决Apache Arrow 在 Python 中以零拷贝从 Java 获取向量

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

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

我需要什么:

  1. 在java中创建vector,使用箭头作为内存映射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)

如果您有对 Java VectorSchemaRoot 对象的 Python 引用,这就是它的工作方式,例如通过使用 jpype(另请参阅 https://uwekorn.com/2020/12/30/fast-jdbc-revisited.html 以充分利用 JDBC)。

如果您使用不同的方法,您将需要遍历 VectorSchemaRoot 的数组,然后遍历它们的缓冲区以获取所有缓冲区的单独内存地址。然后,这些可用于在 pyarrow 端构造 Buffer 对象并返回 pyarrow.Array 实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?