2014-11-26 2 views
1

py4j를 사용하여 jvm을 트리거 할 때 scala/java와 같은 유형 캐스팅을 수행하는 방법이 있습니까?py4j에서 스칼라 유형 캐스팅은 어떻게 이루어 집니까?

기본적으로,이 번역하고 싶습니다 :

someOtherTypeInstance.asInstanceOf[RDD[Any]] 

을 같은 속으로 :

someOtherTypeInstance = gateway.jvm.getSomeOtherTypeInstance() 
someOtherTypeInstance.asInstanceOf(gateway.jvm.RDD[Any]) // don't know how to deal with generics 

답변

1

Py4J는 일반적으로 인해 반사의 무거운 사용의 타입 캐스팅을 필요로하지 않습니다.

개체에 대한 메서드를 호출하면 Py4J는 JVM 반사 기능을 사용하여 개체의 보급 된 형식이 무엇이든 관계없이 개체의 클래스 계층에서이 메서드를 찾습니다. 유사하게, 메소드에 객체를 전달할 때, Py4J는 클래스 계층을 검사하고 객체의 인터페이스를 구현함으로써 가장 가까운 메소드 서명을 찾으려고합니다.

예를 들어,이 코드는 Py4J 완벽하게 유효 : 다른 시나리오 (I 스칼라에 대해 잘 모르는)에 대한 형 변환이 필요한 경우

// 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) 

, 당신은 feature request를 작성해야합니다.

관련 문제