2017-03-10 4 views
1

をautogenreated私はこの単純なDFのコードを書いた:、不変クラス

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

を私はそれを実行したときに、私は以下のこのエラーを得ました。私は、コーダークラスの登録方法に関するDF勧告に従っているので、間違っていることを理解していません。 (FYI:それは自動的に生成された不変クラスのように私は私のクラスに直接注釈を入れることはできません。)お使いの場合には

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>のコーダにマッピングする。しかし、ユースケースに必要なのは、コーダーの特定のインスタンスです。

関連する問題