Python 来自 jvm 通过 py4j 的字节数组
Python byte array from jvm via py4j
我正在使用 py4j 将字节数组 (Array[Byte]) 从 Scala 发送到 python。在 python 方面,我希望创建一个 numpy 数组(最好是不可变的),它只是这些字节的视图,但被解释为 np.complex128。忽略字节顺序,字节顺序如下:real1, imag1, real2, imag2, ...
.
根据 py4j documentation 对于 python 3.5 和 py4j 0.10.3,似乎我应该在 python 端获得一个字节对象,但实际上我得到了一个 Java 数组,据我所知,它有一个对 jvm 端数组的引用,我认为这使得它非常慢。我猜这是由于 Scala 的 "autoboxing" 字节到字节(class),但我不确定。
Py4j 问题:是否可以强制 py4j return 字节的副本?
Scala 问题:也许我的猜测是错误的,在这种情况下它实际上编译为原始字节数组?如果没有,是否有可能确保它除了在 Java 中写入该部分之外无论如何都可以。
强制 Py4J 在 Python 中获取字节数组的唯一方法是确保 Java 正在发送字节 []。
我目前正在研究一种新的二进制协议 (0.11),它将使这些类型的传输更快,并且可以轻松地为这些场景编写适配器。没有计划原生支持盒装原始数组,但您可能想查看 spylon,一组可与 Scala 和 Py4J 一起使用的实用程序。
另一种可能性:Spark 团队使用 Py4J 与 Scala 交互,但使用辅助套接字传输大字节数组,因为目前这不是使用 Py4J 的快速操作。
我正在使用 py4j 将字节数组 (Array[Byte]) 从 Scala 发送到 python。在 python 方面,我希望创建一个 numpy 数组(最好是不可变的),它只是这些字节的视图,但被解释为 np.complex128。忽略字节顺序,字节顺序如下:real1, imag1, real2, imag2, ...
.
根据 py4j documentation 对于 python 3.5 和 py4j 0.10.3,似乎我应该在 python 端获得一个字节对象,但实际上我得到了一个 Java 数组,据我所知,它有一个对 jvm 端数组的引用,我认为这使得它非常慢。我猜这是由于 Scala 的 "autoboxing" 字节到字节(class),但我不确定。
Py4j 问题:是否可以强制 py4j return 字节的副本?
Scala 问题:也许我的猜测是错误的,在这种情况下它实际上编译为原始字节数组?如果没有,是否有可能确保它除了在 Java 中写入该部分之外无论如何都可以。
强制 Py4J 在 Python 中获取字节数组的唯一方法是确保 Java 正在发送字节 []。
我目前正在研究一种新的二进制协议 (0.11),它将使这些类型的传输更快,并且可以轻松地为这些场景编写适配器。没有计划原生支持盒装原始数组,但您可能想查看 spylon,一组可与 Scala 和 Py4J 一起使用的实用程序。
另一种可能性:Spark 团队使用 Py4J 与 Scala 交互,但使用辅助套接字传输大字节数组,因为目前这不是使用 Py4J 的快速操作。