2016-11-22 9 views
0

Aが出力を生成しないとき、PTransform BをPTransform Aに依存させる方法はありますか?あるいは、Aにサイド入力としてBに供給されるダミー出力を生成させる必要がありますか?Apache Beam:ステップBはAの出力をBに渡さずにステップAに依存できますか?

Z = read file 
A = count lines in file, and throw error if there are no lines 
B = do something with the file 

私はBが唯一の終了後に開始したいのですが、AはそれがあるB.

答えて

3

に有用な任意の出力PCollectionを生成しません:例のユースケースは、私は、次のパイプラインを持つようにしたいところであります可能ですが、あなたの場合には本当に望ましいとは限りません。このような依存関係を追加すると、プログラムの並列実行が遅くなります。これは、Bが開始する前にAが完了するのを待つ必要があるからです。

これを本当にやりたければ、要素を出力し、その要素をBのサイド入力として使用する方法でうまくいくはずです。

Z = read file 
A = count lines in file 
B = side input from A, throw error if the count of lines was zero,  
    otherwise do something with the file 
+0

ありがとう:あなたは原始的CountはAを実装するために変換を使用することができ、かつ一箇所にすべてのロジックを移動する代わりに、次のことを考えてみましょう。私が理解しているところから、あなたの提案は、Bを2つのサブステップを持つコンポジットトランスフォームにすることです.1つはカウントがゼロの場合はエラー、もう1つがファイルを処理する場合です。しかし、この場合、後者を誤ったサブステップ出力に処理サブステップで使用される要素を出力させずに後者に依存させる方法はまだありません。 (つまり、コンポジットトランスフォームの 'apply'関数でサブステップが指定されている順序は関係ありません) BがAに依存したいという私の動機は、行数= 0の場合にBが乱れたエラーを起こすためですAが優先されるようにします。 – jwayne

関連する問題