Google cloud dataflow apachebeam:步骤B是否可以依赖于步骤A而不将A的输出传递给B?

Google cloud dataflow apachebeam:步骤B是否可以依赖于步骤A而不将A的输出传递给B?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,当a不产生任何输出时,有没有办法让p转换B依赖于p转换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不会产生任何对B有用的输出PCollection。这是可能的,但在您的情况下可能并不理想。添加这样

当a不产生任何输出时,有没有办法让p转换B依赖于p转换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不会产生任何对B有用的输出PCollection。

这是可能的,但在您的情况下可能并不理想。添加这样的依赖项会降低程序的并行执行速度,因为B需要等待a完成后才能启动

如果您真的想这样做,那么您描述的方法——输出一个元素并将其用作B的侧输入应该可以工作。请考虑下面的内容,它允许您使用原语<代码>计数>代码>转换来实现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

谢谢据我所知,您的建议是使B成为一个包含2个子步骤的复合变换,一个在计数为零时出错,另一个处理文件。但是在这种情况下,如果不让出错子步骤输出一个由处理子步骤使用的元素,仍然无法使后者依赖于前者,对吗?(即,在复合变换的
apply
函数中指定子步骤的顺序并不重要)我希望B依赖于a的动机是,如果行计数=0,B会给出一个深奥的错误,因此我希望a优先。