DataflowJavaSDK Weekly

DataflowJavaSDK の更新を解説します。このブログは Google 社とは一切関係ありません。

PCollectionView, Proto2Coder, Windows support, side inputs per window

今週も 21個ほどコミットが push されていました。そのなかから主に backword-incompatible とされている変更をピックアップしてみます。

PCollectionView の型変数削除

Remove unnecessary type parameter on PCollectionView. c919a29

PCollectionView<T,WT> と2つの型変数を持っていたクラスを PCollectionView<T> と未使用になっていた2つめの型変数を削除しています。 自前で PTransform のクラスを書いているような場合は変更が必要だと思います。DoFn を書いているだけ(つまり普通のユーザー)にとっては影響はないでしょう。たぶん。

nested context to the Proto2Coder

Added support for nested context to the Proto2Coder. · GoogleCloudPlatform/DataflowJavaSDK@6cb1963

Proto2Coder でネストしたメッセージ構造の serialize/deserialize に対応しています。

なんてことない変更ですがなぜこれを取りあげたかというと、DataflowJavaSDK での PCoder というしくみについてちょっと調べてみたからです。 Proto2Coder というのがなにものかというと、これは Protocol Buffer のメッセージを encode/decode するためのものみたいです。処理の実体はほとんど com.google.protobuf のパッケージに委譲しています。 Proto2Coder 自体は DataflowJavaSDK 内では利用されていませんが、これはユーザが PCollection.setCoder() や TextIO.withCoder() で指定して使うためのものだと思われます。Dataflow の pipeline 上のデータ PCollection は構造化されたデータ(つまり Integer だったり Double だったり KV<K, V> といったクラスのインスタンスであったり)ですが、入出力(現在のところ withCoder を実装しているのは TextIO のみのようです)の際に byte stream に変換するにあたりそのフォーマットを指定するのが PCoder です。公式のドキュメントにも説明がありました。 Data Encoding - Google Cloud Dataflow

Windows support

Updated the FileBasedSourceTest so that it does not depend on the size oe of the new line character (it was failing on Windows due to this) · GoogleCloudPlatform/DataflowJavaSDK@38b3685 という変更はただのテストの修正なのですが、注目したのは変更理由で、Windows での改行コードのサイズの違いによりエラーになっていたため、改行コードのサイズに依存しないようにしているとあり、Windows 上でもテストがされているんだな、ということがわかります。

side inputs per window

Makes side inputs per window. · GoogleCloudPlatform/DataflowJavaSDK@32d07db にて、sideInput() についての backwords-incompatible な変更が入っています。 sideInput() は ParDo などで複数の PCollection を受け取るための機構で、メインの入力となる PCollection のほかに ParDo.withSideInputs() で PCollection を受け取って、DoFn 内で ProcessContext.sideInput() で取り出すということができますが、これまで GlobalWindowing、つまり全てのデータが1つの window にはいるというバッチ的なモードしかサポートされていなかったのを、sideInput() でも同じ window のデータのみ受け取れるようにしているようです。おそらくこれは FAQ の limitations of streaming mode のひとつである "Side Inputs to ParDo are not supported in streaming mode." を解消するべく導入されたものだと思います。

[追記] この変更は Rollback of a "Makes side inputs per window" change. · GoogleCloudPlatform/DataflowJavaSDK@90c811a で rollback されました。まだ何か問題があったのでしょうか。