猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

生成AIに作成させたコント『Apache Beam 入門セミナー 〜謎のエンジニア集団〜』

登場人物

  • アパ・チービーム(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 がある!」

公式 Transform Catalog

グーグル田:「公式に色々あるんや…」

ビッグ・クエリー:「でも 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 は大量データの処理に最適!詳細は公式ドキュメントへ!」

Apache Beam 公式ドキュメント

読んだ感想(ここは生成AIじゃないです)

最近 Apache Beam を勉強してまとめたので、それを生成AIに噛ませることで、面白くてわかりやすい説明ができないかなといった試みです(自分でこれを書くのは大変なので)。

面白いかもしれない(自分は結構好き)ですが Apache Beam についてはいまいちわからないかもしれない

ただ登場人物の名前が面白いだけの即オチかもしれない...