Google cloud dataflow 无法转换包含类型映射的PCollection-“;错误的参数数量“;

Google cloud dataflow 无法转换包含类型映射的PCollection-“;错误的参数数量“;,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在尝试使用ParDo对apachebeam中的Map对象的PCollection应用一个转换。我指定Map作为第一个DoFn的输出类型,并指定Map作为下一个DoFn的输入类型。但是,我得到了以下错误: [错误]无法在上执行目标org.codehaus.mojo:exec maven插件:1.6.0:java(默认cli) project word count beam:执行Java时发生异常 班级。调用编码器工厂方法public static时出错 org.apache.beam.sdk.

我正在尝试使用ParDo对apachebeam中的Map对象的PCollection应用一个转换。我指定Map作为第一个DoFn的输出类型,并指定Map作为下一个DoFn的输入类型。但是,我得到了以下错误:

[错误]无法在上执行目标org.codehaus.mojo:exec maven插件:1.6.0:java(默认cli) project word count beam:执行Java时发生异常 班级。调用编码器工厂方法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): 参数数目错误->[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()))
     {...}
   }
静态类GetProductName扩展了DoFn{
@过程元素
公共void processElement(ProcessContext c){
{...}
映射属性=新的HashMap();
放置(“名称”、“测试名称”);
属性。放置(“sku”、“测试sku”);
//使用ProcessContext.output发出输出元素。
c、 输出(属性);
}
}
静态类FormatForDatastore扩展了DoFn{
@过程元素
公共void processElement(ProcessContext c){
Map product=newhashmap();
product=c.元素();
{...}
}
}
公共静态void main(字符串[]args){
WordCountOptions=PipelineOptionFactory.fromArgs(args).withValidation().as(WordCountOptions.class);
Pipeline p=Pipeline.create(选项);
//应用变换
p、 apply(“ReadJSONLines”,TextIO.read().from(options.getInputFile()))
.apply(ParDo.of(新GetProductName()))
.apply(ParDo.of(新FormatForDatastore()))
{...}
}
你知道问题是什么吗


我不知道如何解释这个错误。我做了一些测试,通过编辑代码来转换类型String的PCollection而不是类型Map,它可以正常工作。但是,我想知道一种在这些转换之间传递多个键值对的方法。欢迎提供备选方案建议。

您正在使用原始类型映射。尝试使用正确的泛型类型
映射