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

时间:2016-07-26 18:26:43

标签: google-cloud-platform google-cloud-dataflow apache-beam

我正在尝试使用Dataflow中的新display data功能,以便在Google Cloud Dataflow用户界面中显示其他详细信息。但是,自定义PTransform的显示数据不会显示。在我的Dataflow管道中,我有一个变换:

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"));
  }
});

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

1 个答案:

答案 0 :(得分:2)

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中的复合变换。