在我的Apache Beam管道中,我的集合可能是空的(它包含处理过程中的错误,可能没有错误(。
我用那些错误的项目创建了errors.csv文件。如果没有错误,我希望跳过创建该文件。但目前ApacheBeam创建文件(只有标题行(,即使带有错误的输入PCollection为空。
我的代码
TextIO.Write errorsWrite= TextIO.write()
.withHeader(..)
.to(..)
PCollection<ErrorItems> errors=...
errors.apply("write errors to file",errorsWrite)
除了在一个不推荐使用的方法的注释中,似乎没有任何地方记录这一点,这意味着为空的PCollection创建一个空文件是预期行为。
对于这种情况,最合理的解决方法是添加额外的代码(可能是在收到PipelineResult之后(来读取errors.csv,查看其中是否有除头文件之外的任何项目,如果没有,则删除该文件。