0

我正在使用 py4j 将字节数组 (Array[Byte]) 从 Scala 发送到 python。在 python 方面,我希望创建一个 numpy 数组(最好是不可变的),它只是这些字节的视图,但被解释为 np.complex128。不考虑字节顺序,字节顺序如下:real1, imag1, real2, imag2, ....

根据python 3.5 和 py4j 0.10.3 的py4j 文档,似乎我应该在 python 端获得一个字节对象,但我实际上得到了一个 JavaArray,据我所知,它有一个对数组的引用jvm 方面,我认为这使得这很慢。我猜这是由于Scala的字节到字节(类)的“自动装箱”,但我不确定。

Py4j 问题:是否可以强制 py4j 返回字节的副本?

Scala 问题:也许我的猜测是错误的,在这种情况下它实际上编译为原始字节数组?如果没有,除了用Java编写那部分之外,是否有可能确保它无论如何都可以做到。

4

1 回答 1

1

强制 Py4J 在 Python 中获取 bytearray 的唯一方法是确保 Java 正在发送一个 byte[]。

我目前正在研究一种新的二进制协议(0.11),它将使这些类型的传输更快,并且可以很容易地为这些场景编写适配器。没有计划原生支持盒装原始数组,但您可能想查看spylon,这是一个与 Scala 和 Py4J 一起使用的实用程序集合。

另一种可能性:Spark 团队使用 Py4J 与 Scala 交互,但使用辅助套接字传输大字节数组,因为目前这不是 Py4J 的快速操作。

于 2016-10-06T13:06:19.670 回答