我有一个包含很多步骤的管道(仅在15步以上)。我想在DoFn每次失败时报告失败。我开始通过TupleTags使用如下代码实现它:

try {
 ... do stuff ...
 c.output(successTag, ...);
} catch (Exception e) {
 c.output(failureTag, new Failure(...));
}

但是,由于我的管道包含很多步骤,因此这使得管道定义代码很难读取/维护。

有没有更全局化的方法来实现这一目标?像引发在管道级别全局处理的自定义异常之类的东西?

最佳答案

您正在做的是捕获错误并以不同方式输出错误的正确方法。不过,您将在每个步骤中都需要此功能。如果愿意,可以使用Java模式重用它。为所有ParDos创建一个基类,并在processElement中添加异常处理代码。然后在单独的函数(即processElementImpl)中实现您的processElement,您可以在processElement中进行调用。

10-02 08:45