我使用py4j将字节数组(ArrayByte)从Scala发送到python。在python方面,我希望创建一个numpy数组(最好是不可变的),它只是这些字节的视图,但被解释为np.complex128。不考虑字节顺序,字节按如下顺序排列:real1, imag1, real2, imag2, ...。
根据python3.5和py4j文档 0.10.3的py4j,似乎我应该在python端获得一个字节对象,但实际上我得到了一个JavaArray,据我所知,它对jvm端的数组有一个引用,我认为这很慢。我猜想这是由于Scala将字节“自动装箱”给byte (类),但我不确定。
Py4j问题:是否可以强制py4j返回字节的副本?
Scala问题:也许我的猜测是错误的,在这种情况下,它实际上编译成了原始字节数组?如果没有,除了用Java编写该部分之外,是否可以确保它在任何情况下都这样做。
发布于 2016-10-06 13:06:19
强制Py4J在Python中获得字节数组的唯一方法是确保byte[]发送一个byte[]。
我目前正在开发一种新的二进制协议(0.11),它将使这些类型的传输速度更快,并使为这些场景编写适配器变得更容易。本机不打算支持装箱的基元数组,但您可能需要查看尖塔,这是一组与Scala和Py4J一起工作的实用程序。
另一种可能是: Spark使用Py4J与Scala交互,但使用辅助套接字来传输大字节数组,因为这目前不是Py4J的快速操作。
https://stackoverflow.com/questions/39892778
复制相似问题