case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

DataflowでPython3系を使って良いのか検討してみた

DataflowでPython3系を使って良さそうか調べてみました。

Python3系を使いたい理由

DataflowはETLツールなのでデータ加工が主な役割です。Dataflowのサポートする言語としてJavaやGoも扱えますが、Pythonと比較すると機械学習系のライブラリが不足していたり、学習コストも高いです。またバッチ処理を作る前に行う分析作業はJupyterで行うため、Pythonで作ったコードも使えません。また、Python2系は以前よりDataflowでサポートされてますが、2020年目処にPython2系は非推奨となります。なので3系でDataflowを使いたいと考えてます。

DataflowのPython3系のサポート状況について

Apache Beam 2.14.0 以降の Python 3 SDK はベータサポートとなっておりDataflowでPython3系は扱えるようになってます。
f:id:casekblog:20191007165858p:plain
cloud.google.com

Apach Beamのサポート状況を確認すると、Datalabの対応はまだできてないようです。
f:id:casekblog:20191007174749p:plain
issues.apache.org

Apach Beamのissueについて

こちらで対応状況を確認できます。まだ対応できてない課題はありますが、大多数のissueは解決済みのようです。
issues.apache.org

動作確認

試しに3系でバッチ処理を試してみましたが、Python3系でも問題なくできました。
www.case-k.jp

ストリーミング処理は?

ストリーミング処理も対応していますが、ストリーミングのオートスケールはPythonだと未対応のようです。この点だとJavaの方が良さそうです。
f:id:casekblog:20191108122303p:plain:w300
よくある質問  |  Cloud Dataflow  |  Google Cloud
ストリーミング処理についてはこちらの記事を確認してみてください。
www.case-k.jp


結論(個人的な)

個人的にはPythonを使うなら3系がベータ版になったことを考慮すると問題ないように思いました。Dataflowで何をするかにも依存するので、実施したい内容によっては2系でも良いかもしれませんが、2系が非推奨になることを考えると3系の方が良いように思いました。一方でストリーミング処理の場合、現時点ではJavaの方が良さそうです。