在Dataflow中覆盖AvroIO默认编码器

时间:2017-01-24 17:03:50

标签: java avro google-cloud-dataflow kryo apache-beam

我正在尝试使用自定义编码器来处理Dataflow中的数据。我做的是以下内容:

  • 从BigQuery导出数据到avro文件
  • 使用avro-tools-1.7.7.jar
  • 从这些文件中的架构自动生成一个类
  • 使用Kryo
  • 为班级写了一个自定义编码器
  • 使用@DefaultCoder(MyCustomCoder.class)
  • 注释班级
  • 使用p.getCoderRegistry().registerCoder(MyCustomClass.class, MyCustomCoder.class);
  • 注册我的程序员
  • 使用PCollection<MyCustomClass> pc = p.apply(AvroIO.Read.named("Name").from("gs://bucket/path/to/*.avro").withSchema(MyCustomClass.class));
  • 从avro文件中读取数据

问题是,如果我的编码器中有错误,我的工作只会在洗牌过程中失败。它看起来并不像Dataflow使用我的自定义编码器来加载avro文件中的数据。 那是真的吗?如果是这样,有没有办法覆盖用于加载数据的编码器?

1 个答案:

答案 0 :(得分:1)

AvroIO目前始终使用内置的AvroCoder来读取输入文件。您可以像之前描述的那样在管道中更改编码器。如果您的数据实际上并未以AvroIO可以读取的方式进行编码,则应使用其他来源,例如FileBasedSource的新子类。