当使用py4j触发jvm时,有没有办法像scala / java那样完成类型转换?
基本上,我想翻译一下:
someOtherTypeInstance.asInstanceOf[RDD[Any]]
变成类似:
someOtherTypeInstance = gateway.jvm.getSomeOtherTypeInstance()
someOtherTypeInstance.asInstanceOf(gateway.jvm.RDD[Any]) // don't know how to deal with generics
最佳答案
Py4J通常不需要类型转换,因为它大量使用反射。
如果您在对象上调用方法,则Py4J将使用JVM反射工具在对象的类层次结构中找到此方法,无论对象的广告类型是什么。同样,当您将对象传递给方法时,Py4J将尝试通过检查对象的类层次结构和实现的接口来查找最接近的方法签名。
例如,此代码在Py4J中完全有效:
// Java code
public class TestTypes {
public void method1(Foo param1) {}
public Object getObject() { new Foo() }
}
// Python code
myJavaObject = java_gateway.jvm.TestTypes()
obj = myJavaObject.getObject()
// no need for type casting
myJavaObject.method1(obj)
如果您需要在其他情况下进行类型转换(我对Scala不太了解),则应填写feature request。
关于java - 如何在py4j中完成scala类型转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27142693/