tl;dr
(今のところ)JavaのほうがBeam/Dataflowで使える機能多いよ。
けどPythonも良くなっているよ
Streaming
Beam/Dataflowでは、無限に来る入力に対してStreaming処理が出来ます。
Streaming処理はPythonでも書くことは出来ますが、DataflowRunnerでは
まだBetaオートスケーリング出来ないStreamingEngine出来ないDrain出来ない
(すでにある入力を処理してから、ジョブを止める処理)Pipelineの更新
などの制限があります。
↑
最近できるようになりました!
他にもいくつかあり、Beamのドキュメントに記載されています。
Dynamic Destination
PCollectionの中身(Pub/Subのメッセージなど)に応じて、出力先(ファイル名とかテーブル名)を変更することを、BeamではDynamic Destinationと呼びます。
Beam 2.14以上でPythonでも出来るようになったのですが、まだExperimentです。
(具体的に機能に差があるかは追えてません…)
組み込みIO
Beam/Dataflowは、組み込みでいくつかの入出力を提供しています。
GCSやBigQuery、Pub/SubなどはJavaでもPythonでもサポートされていますが、S3やKinesisなどはJavaだけです。
(自前で書けば出来るかも…)
雑記
- Java書きたくない…そんなワガママな貴方にはScala+Scioもいいかもしれません。
- Pythonの未来はPortability Frameworkに期待
- Spark Runnerなどは、この機能でPythonでも書けるようになった?
事例
日本に限っても、Dataflow/Beam結構つかわれていますね。
Java・Scala
Python
その他(KotlinとかGoとか)
見つけたらコッソリ教えてください