来自jvm经py4j的Python字节数组

时间:2016-10-06 09:49:36

标签: scala jvm py4j

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

根据py4j documentation对于python 3.5和py4j 0.10.3,似乎我应该在python端获得一个字节对象但是我实际上得到了一个JavaArray,据我所知它有一个参考回到jvm端的数组,我认为这很慢。我猜测这是因为Scala" autoboxing"字节到字节(类),但我不确定。

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

Scala问题:也许我猜错了,在这种情况下它实际上编译成原始字节数组?如果没有,除了用Java编写该部分之外,是否有可能确保它确实存在。

1 个答案:

答案 0 :(得分:1)

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

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

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