复合转换中缺少数据流显示数据

Dataflow Display Data missing from composite transform

我正在尝试 Dataflow 中的新 display data 功能,以便在 Google Cloud Dataflow UI 中显示更多详细信息。但是,自定义 PTransform 的显示数据不会显示。在我的数据流管道中,我有一个像这样的转换:

Pipeline p = // ..
p.apply(new PTransform<PCollection<Integer>, PCollection<Integer>>() {
  @Override
  public PCollection<Integer> apply(PCollection<Integer> input) {
    return input
      .apply(/* .. */)
      .apply(/* .. */)
      .apply(/* .. */);
  }

  @Override
  public void populateDisplayData(DisplayData.Builder builder) {
    builder.add(DisplayData.item("foo", "bar"));
  }
});

当我 运行 Dataflow 作业时,UI 似乎没有显示 foo=bar 显示数据。

composite transforms 不支持显示数据。相反,您可以将显示数据附加到转换执行的任何用户定义函数。例如,如果上述复合中的内部转换之一使用 ParDo,您可以将显示数据方法重写为:

Pipeline p = // ..
p.apply(new PTransform<PCollection<Integer>, PCollection<Integer>>() {
  @Override
  public PCollection<Integer> apply(PCollection<Integer> input) {
    return input
      .apply(/* .. */)
      .apply(/* .. */)
      .apply(ParDo.of(new DoFn<Integer, Integer>() {
        @Override
        public void processElement(ProcessContext c) { /* .. */ } 

        @Override
        public void populateDisplayData(DisplayData.Builder builder) {
          builder.add(DisplayData.item("foo", "bar"));
        }            
      }));
  }
});

a JIRA issue 将显示数据功能扩展到 Beam 和 Dataflow SDK 中的复合转换。