Help us understand the problem. What is going on with this article?

Apache BeamのAvroCoderの話

AvroCoderとは

データのシリアライズ・デシリアライズにAvro形式を使う、Beam組み込みのcoderです。
ソースコードはここに、javadocはここにあります。

Coderとは

Beamがデータのシリアライズ・デシリアライズに使うクラスです

Avroとは

シリアライズのフォーマット(と周辺のエコシステム)です。
reflectという仕組みで、Javaのクラスからスキーマを作成することも出来ます(例)

どうやって使うの

coder指定したいクラスに、下みたいにアノテーション付ければ良いらしいです。
なお、引数なしのコンストラクタが必要です。

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

また、Avroのスキーマを明示的に定義してcoderを作ることも出来ます
(この場合は、アノテーションではなくCoderRegistryで登録?)

AvroCoderの何がいいの

  • 組み込みのcoderなのですぐに使える
  • ジェネリクスなので任意のクラスに使える
    • 引数なしのコンストラクタが必要、static/transietなフィールドは含まれないなどの制限はある
  • deterministicなcoderになりうる
    • (ならない場合もあります)
    • SerializableCoderやMapCoderはdeterministicにならない

deterministic?

同じオブジェクトが、どこでもいつでも同じエンコーディングを持つかを示す、coderの性質です

GroupByやDynamic Destinationはdeterministicなcoderを必要とします。

AvroCoderとdeterministic

AvroCoderがdeterministicかどうかは、シリアライズ対象のクラスによって決まり、ここらへんで定義されています。

Avroのデータ型で言うと、下のような感じです。

  • deterministic
    • Avroの組み込み型(boolean,int,long,float,doubles,bytes)
    • Enum
  • deterministicでない
    • Fixed(固定長のバイナリデータ)
  • 内容次第
    • Map,Record,Array,Union
    • String(※)

動的にスキーマ作る時のJavaの型とAvroの型の対応は、reflectのドキュメントにあります。
判定面倒なので、verifyDeterministicメソッド呼んで確認するのもいいかもしれません。

※ StringやURI、BigDecimalなどがホワイトリストで指定されており、その他(Stringableアノテーションで指定する)のクラスはdeterministicではありません

kurtosis
ただのプログラマー
brainpad
ブレインパッドは、2004年の創業以来、データによるビジネス創造と経営改善に向き合ってきたデータ活用・分析企業です。
http://www.brainpad.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした