在使用 setRowSchema 和 setCoder 方法设置 Avro 序列化和反序列化时,需要注意 Beam 版本的兼容性问题。如果 Beam 版本较高,可能会导致下面的异常:
java.lang.IllegalStateException: Unable to infer a coder and no Coder was specified.This can happen because no coder is registered for the required type or because there is not a correctly registered CoderFactory that can generate a coder for this type.
为了解决这个问题,建议手动注册 Avro 的反序列化器,并将其与 CoderRegistry 关联。例如,下面的示例代码在注册 Avro 反序列化器之后,将其与 CoderRegistry 关联:
AvroCoderProvider.getBuilder().setCoderRegistry(pipeline.getCoderRegistry())
最后,确保使用支持 Avro 数据源的适当版本的 Apache Beam 库。