2017-12-17 11 views
0

ParadoでApacheビームのMapオブジェクトのPCollectionに変換を適用しようとしています。最初のDoFnの出力タイプとしてMapを指定し、次のDoFnの入力タイプとしてMapを指定しました。しかし、私は次のエラーを取得しています:は、マップを含むPCollectionを変換できません。マップ - 「間違った引数の数」

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project word-count-beam: An exception occured while executing the Java class. error when invoking Coder factory method public static org.apache.beam.sdk.coders.MapCoder org.apache.beam.sdk.coders.MapCoder.of(org.apache.beam.sdk.coders.Coder,org.apache.beam.sdk.coders.Coder): wrong number of arguments -> [Help 1]

ここに私のコードだ:

static class GetProductName extends DoFn<String, Map> { 
    @ProcessElement 
    public void processElement(ProcessContext c) { 
     {...} 
     Map<String, String> properties = new HashMap<>(); 
     properties.put("name", "test_name"); 
     properties.put("sku", "test_sku"); 

     // Use ProcessContext.output to emit the output element. 
     c.output(properties); 
    } 
    } 

    static class FormatForDatastore extends DoFn<Map, Entity> { 
    @ProcessElement 
    public void processElement(ProcessContext c) { 
     Map<String, String> product = new HashMap<>(); 
     product = c.element(); 
    {...} 
    } 
    } 

    public static void main(String[] args) { 
    WordCountOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(WordCountOptions.class); 
    Pipeline p = Pipeline.create(options); 

    // apply transforms 
    p.apply("ReadJSONLines", TextIO.read().from(options.getInputFile())) 
    .apply(ParDo.of(new GetProductName())) 
    .apply(ParDo.of(new FormatForDatastore())) 
    {...} 
    } 

問題が何であるかを任意のアイデア?

エラーの解釈方法がわかりません。私はMap型の代わりにString型のPCollectionを変換するコードを編集していくつかのテストを行い、問題なく動作します。しかし、私はこれらの変換の間に複数のキーの値のペアを渡す方法が欲しいです。代替案の提案は大歓迎です。

答えて

0

生タイプのマップを使用しています。適切なジェネリックタイプMap<String,String>を試してください。