我正在尝试使用自定义编码器来处理Dataflow中的数据。我做的是以下内容:
@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));
问题是,如果我的编码器中有错误,我的工作只会在洗牌过程中失败。它看起来并不像Dataflow使用我的自定义编码器来加载avro文件中的数据。 那是真的吗?如果是这样,有没有办法覆盖用于加载数据的编码器?
答案 0 :(得分:1)
AvroIO目前始终使用内置的AvroCoder来读取输入文件。您可以像之前描述的那样在管道中更改编码器。如果您的数据实际上并未以AvroIO可以读取的方式进行编码,则应使用其他来源,例如FileBasedSource的新子类。