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

BeamのDoFn/SimpleFunction/SerializableFunction

DoFn/SimpleFunction/SerializableFunctionは、Beamの抽象クラス/インターフェイスです。
機能が似ており、時々忘れるのでメモです。

DoFn

説明

ParDo.ofの引数に指定してTransformを定義するためのクラスです。
アノテーションを設定し制御することが出来ます。

  • ProcessElement
    • 入力から出力の変換処理(任意の数の出力)。
  • StartBundle/FinishBundle
  • Setup/Teardown

DoFnが満たすべき性質などについて、ParDoのドキュメントに補足が記載されています。

  • シリアライザブル
  • グローバルな状態を持たない
    • なんかやり取りしたい時はPCollection通してやろう
  • フォールトトレランス性
    • 再実行されることはありうるので、冪等になるようなDoFnにしよう
    • (無理な時はDoFnの外側のどこかで、カバーする必要)
  • 最適化
    • Beam RunnerがParDo同士をくっつけて(fusion)、最適化することもあるよ
    • くっつけやすいように、また、プログラムが理解しやすいように、DoFnは一つのタスクだけに集中した方がよい
    • Dataflowのfusionの説明

使用例


SimpleFunction

説明

名前の通り、シンプルなメソッドを定義する抽象クラスです。

使用例


SerializableFunction

説明

  • 名前の通り、Serializableである必要があります
  • さらに検査例外を投げることも出来ません

使用例

  • FileIO#by
    • 動的に送り先を指定するメソッドです
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
ユーザーは見つかりませんでした