2017-12-17 6 views
0

Parado와 함께 Apache 빔에서 Map 개체의 PCollection에 변환을 적용하려고합니다. 첫 번째 DoFn의 출력 유형으로 Map을 지정하고 다음 DoFn의 입력 유형으로 Map을 지정했습니다. 그러나, 나는 다음과 같은 오류를 받고 있어요 :형식을 포함하는 PCollection을 변환 할 수 없습니다. Map - "잘못된 인수 수"

[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>을 사용해보십시오.