关于Apache Beam的AvroCoder的讨论

AvroCoder是什么?

使用Avro格式进行数据的序列化和反序列化是Beam内置的编码器。
源代码在这里,javadoc在这里。

Coder是什么?

Beam使用的是用于数据序列化和反序列化的类。

Avro是什么?

这是关于序列化的格式(和周边生态系统)。
通过reflect机制,我们可以从Java类创建模式(例如)。

怎么使用? ?)

只需要在指定的类中加上类似下面的注释即可。此外,还需要一个无参数的构造函数。

 @DefaultCoder(AvroCoder.class)
 public class MyCustomElement {
     ...
 }

而且,您还可以明确定义Avro的模式并创建编码器。
(在这种情况下,是通过CoderRegistry注册,而不是使用注解吗?)

AvroCoder有什么好处呢?

    • 組み込みのcoderなのですぐに使える

 

    • ジェネリクスなので任意のクラスに使える

引数なしのコンストラクタが必要、static/transietなフィールドは含まれないなどの制限はある

deterministicなcoderになりうる

(ならない場合もあります)
SerializableCoderやMapCoderはdeterministicにならない

确定性的?

这是coder的特性,它表明同一个对象可以在任何地方、任何时候具有相同的编码。

GroupBy和Dynamic Destination需要确定性编码器。

AvroCoder和确定性的

AvroCoder的确定性取决于要序列化的类,并在此处进行定义。

在Avro的数据类型中,可以理解为以下的感觉。

    • deterministic

Avroの組み込み型(boolean,int,long,float,doubles,bytes)
Enum

deterministicでない

Fixed(固定長のバイナリデータ)

内容次第

Map,Record,Array,Union
String(※)

在使用Java和Avro创建动态模式时,可以在reflect文档中找到Java类型和Avro类型的对应关系。
因为判断很麻烦,所以调用verifyDeterministic方法进行确认也是一个不错的选择。

※ 白名单中指定了String、URI、BigDecimal等类,而其他(通过Stringable注解指定)的类则不确定。

广告
将在 10 秒后关闭
bannerAds