DoFn/SimpleFunction/SerializableFunctionは、Beamの抽象クラス/インターフェイスです。
機能が似ており、時々忘れるのでメモです。
DoFn
説明
ParDo.ofの引数に指定してTransformを定義するためのクラスです。
アノテーションを設定し制御することが出来ます。
- ProcessElement
- 入力から出力の変換処理(任意の数の出力)。
- StartBundle/FinishBundle
- bundle単位の処理
- Setup/Teardown
DoFnが満たすべき性質などについて、ParDoのドキュメントに補足が記載されています。
- シリアライザブル
- 無名クラス(=内部クラス)でDoFnを継承すると、外側のクラスへの参照を持つので気をつけよう
- グローバルな状態を持たない
- なんかやり取りしたい時はPCollection通してやろう
- フォールトトレランス性
- 再実行されることはありうるので、冪等になるようなDoFnにしよう
- (無理な時はDoFnの外側のどこかで、カバーする必要)
- 最適化
- Beam RunnerがParDo同士をくっつけて(fusion)、最適化することもあるよ
- くっつけやすいように、また、プログラムが理解しやすいように、DoFnは一つのタスクだけに集中した方がよい
- Dataflowのfusionの説明
使用例
SimpleFunction
説明
名前の通り、シンプルなメソッドを定義する抽象クラスです。
使用例
- MapElements.via
- 1:1のTransformを定義するメソッドです
- WordCountでも使われています
SerializableFunction
説明
- 名前の通り、Serializableである必要があります
- さらに検査例外を投げることも出来ません
- 検査例外投げたい時は、ProcessFunctionを使えとのこと
使用例
- FileIO#by
- 動的に送り先を指定するメソッドです