2016-11-22 73 views
0

当A不产生任何输出时,有没有办法让PTransform B依赖PTransform A?或者我必须让A产生一个虚拟输出作为侧输入输入到B中?一个例子使用的情况是,我想有以下管道:Apache Beam:步骤B能否依赖于步骤A而不将A的输出传递给B?

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

我想B开始A完成后才能,但A不产生任何输出PCollection有用B.

回答

3

这是可能的,但在你的情况下可能并不是真正需要的。像这样添加一个依赖会减慢程序的并行执行速度,因为在启动之前B需要等待A完成。

如果你真的想这样做,你所描述的方式 - 输出一个元素,并使用它作为B的侧面输入应该工作。考虑代替;下面,使您可以使用原始Count变换来实现A,然后将所有的逻辑放到一个地方:

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

感谢。根据我的理解,你的建议是让B成为一个复合变换,其中有两个子步骤,一个是计数为零时出错,另一个是处理文件的时候。但是在这种情况下,仍然没有办法使后者依赖于前者,而没有错误子步骤输出处理子步骤使用的元素,对吗? (也就是说,在复合变换的'apply'函数中指定子步骤的顺序并不重要) 我希望B依赖于A的动机是如果行计数= 0,B会产生深奥的错误,所以我希望A的优先。 – jwayne

相关问题