登場人物
- アパ・チービーム(Apachy Beam):Apache Beam の伝道師。妙にカタカナ発音が多い。
- グーグル田(Google Data):Google Cloud Dataflow を崇拝する男。クラウドを信じて疑わない。
- ビッグ・クエリー(Big Query):細かいことをすぐ SQL で解決しようとする。
謎のエンジニアセミナー
(暗闇の中、スポットライトが当たる)
アパ・チービーム:「おぬしら、今日から Apache Beam のパワーを授ける…!」
グーグル田:「え、なになに?いきなり始まるやん!」
ビッグ・クエリー:「まあまあ、SQL で解決できるならいいけど…」
Apache Beam とは?
アパ・チービーム:「Apache Beam とは…大量のデータ処理を司る最強のフレームワークじゃ!」
グーグル田:「え、Google Cloud Dataflow で動くやつですよね?」
アパ・チービーム:「そう、Dataflow の力を借りることで…データ処理の旅が始まるのだ!」
ビッグ・クエリー:「いや、それ SQL でやればよくない?」
アパ・チービーム:「黙らんか、クエリーめ!」
Pipeline / PCollection / PTransform
アパ・チービーム:「Apache Beam は、すべて Pipeline から始まる!」
Pipeline pipeline = Pipeline.create();
グーグル田:「Pipeline って、データ処理の流れを管理するやつ?」
アパ・チービーム:「その通り!データは PCollection という形で流れ…PTransform によって変換される!」
PCollection<String> input = pipeline.apply(new SomeInputTransform()); PCollection<Integer> transformed = input.apply(new SomeTransform());
ビッグ・クエリー:「いや、これ SELECT * FROM input_table
で終わるやろ?」
アパ・チービーム:「いやいや、SQL じゃない!Apache Beam は ストリームデータ も処理できるのだ!」
グーグル田:「うわ…未来っぽい!」
PBegin / PEnd
アパ・チービーム:「データの入り口は PBegin !」
PTransform<PBegin, PCollection<Data>> input = new SomeSource();
グーグル田:「ほえー、最初は PBegin って指定するんや…」
アパ・チービーム:「そして、出口は PEnd !」
output.apply(new SomeSink());
ビッグ・クエリー:「俺の LIMIT 1
とは違うんか?」
アパ・チービーム:「ちゃうねん、SQL は一発やけど、Beam は流れやねん!」
シリアライズ
アパ・チービーム:「Beam のデータは シリアライズ されなければならぬ…」
class SomeData implements Serializable { private String value; }
グーグル田:「え、Serializable つけなあかんの?」
アパ・チービーム:「さもなくば、お前のデータは Pipeline の外に放り出される…!」
ビッグ・クエリー:「SQL なら JSON で済むのに…」
ParDo / DoFn
アパ・チービーム:「最も重要な変換、それが ParDo !」
PCollection<String> results = input.apply(ParDo.of(new DoFn<String, String>() { @ProcessElement public void processElement(ProcessContext c) { c.output(c.element().toUpperCase()); } }));
グーグル田:「え、データに並列で処理を適用できるん?」
アパ・チービーム:「その通り!これは…」
ビッグ・クエリー:「え、これ UPPER(column_name)
でいけへん?」
アパ・チービーム:「だから SQL じゃないねん!!」
あらかじめ用意されている PTransform
アパ・チービーム:「よきかな…Apache Beam には、すでに便利な Transform がある!」
グーグル田:「公式に色々あるんや…」
ビッグ・クエリー:「でも SQL で…」
アパ・チービーム:「もうええわ!!」
ValueProvider / SideInput / TupleTag
アパ・チービーム:「値は ValueProvider で動的に指定できる!」
ValueProvider<String> provider = RuntimeValueProvider.of("defaultValue");
グーグル田:「つまり、パイプライン実行時に値を決められる…?」
アパ・チービーム:「そうだ!そして、外部データを SideInput として渡すことも可能!」
PCollectionView<List<String>> sideInput = input.apply(View.asList());
ビッグ・クエリー:「それ JOIN
やん…?」
アパ・チービーム:「もう SQL 言うな!!」
まとめ
アパ・チービーム:「これが Apache Beam だ!」
グーグル田:「Dataflow で動かせば、スケールも自由自在!」
ビッグ・クエリー:「でも SQL で…」
アパ・チービーム:「ええい!お前には DROP TABLE
じゃ!」
(場内爆笑)
ナレーション
「Apache Beam は大量データの処理に最適!詳細は公式ドキュメントへ!」
読んだ感想(ここは生成AIじゃないです)
最近 Apache Beam を勉強してまとめたので、それを生成AIに噛ませることで、面白くてわかりやすい説明ができないかなといった試みです(自分でこれを書くのは大変なので)。
面白いかもしれない(自分は結構好き)ですが Apache Beam についてはいまいちわからないかもしれない
ただ登場人物の名前が面白いだけの即オチかもしれない...