2017-03-10 1 views
1

을 autogenreated 나는이 간단한 DF 코드 작성 :, 불변 클래스

CoderRegistry cr = pipeline.getCoderRegistry(); 
cr.registerCoder(ImmutableFloatRegionsVector.class, AvroCoder.class); 

을하지만 난 그것을 실행했을 때, 나는 아래이 오류가 발생했습니다. 나는 코더 클래스를 등록하는 방법에 대한 DF 권고안을 따르고 있으므로, 내가 잘못하고있는 것을 이해하지 못한다. (참고 :.이 자동으로 생성 불변 클래스의 나는 내 수업에 직접 주석을 넣을 수 없습니다)

Exception in thread "main" java.lang.IllegalArgumentException: cannot register Coder class com.google.cloud.dataflow.sdk.coders.AvroCoder: does not have an accessible method named 'of' with 1 arguments of Coder type 
    at com.google.cloud.dataflow.sdk.coders.CoderFactories$CoderFactoryFromStaticMethods.getFactoryMethod(CoderFactories.java:166) 
    at com.google.cloud.dataflow.sdk.coders.CoderFactories$CoderFactoryFromStaticMethods.<init>(CoderFactories.java:145) 
    at com.google.cloud.dataflow.sdk.coders.CoderFactories$CoderFactoryFromStaticMethods.<init>(CoderFactories.java:90) 
    at com.google.cloud.dataflow.sdk.coders.CoderFactories.fromStaticMethods(CoderFactories.java:72) 
    at com.google.cloud.dataflow.sdk.coders.CoderRegistry.registerCoder(CoderRegistry.java:142) 
    at com.iai.DeepSearch.setUpPipeline(DeepSearch.java:110) 
    at com.iai.DeepSearch.main(DeepSearch.java:65) 
Caused by: java.lang.NoSuchMethodException: com.google.cloud.dataflow.sdk.coders.AvroCoder.of(com.google.cloud.dataflow.sdk.coders.Coder) 
    at java.lang.Class.getDeclaredMethod(Class.java:2130) 
    at com.google.cloud.dataflow.sdk.coders.CoderFactories$CoderFactoryFromStaticMethods.getFactoryMethod(CoderFactories.java:164) 
    ... 6 more 

답변

2

를 귀하의 경우에는, 내가 좋아하는, 사용자 정의 클래스 AvroCoder의 단일 인스턴스를 등록해야합니다 이 :

cr.registerCoder(
    ImmutableFloatRegionsVector.class, 
    AvroCoder.of(ImmutableFloatRegionsVector.class)); 

기술적 세부 사항이 있습니다 : 당신이 클래스 코더를 등록 할 때, 일반적인 paramete에 대한 코더를 매핑하는 정적 메서드가 CoderFactory에 동등한 만드는 클래스를 것으로 예상된다 예를 들어 T에 대한 코더를 List<T>에 대한 코더에 매핑하는 것과 같이 데이터 구조에 대한 코더로 전송할 수 있습니다. 하지만 유스 케이스에 필요한 것은 코더의 특정 인스턴스입니다.