Apache Beam-跳过管道步骤

时间:2018-12-07 06:52:22

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

我正在使用Apache Beam来建立包含2个主要步骤的管道:

  • 使用波束变换来变换数据
  • 将转换后的数据加载到BigQuery

管道设置如下:

myPCollection = (org.apache.beam.sdk.values.PCollection<myCollectionObjectType>)myInputPCollection
                .apply("do a parallel transform"),
                     ParDo.of(new MyTransformClassName.MyTransformFn()));

 myPCollection
    .apply("Load BigQuery data for PCollection",
            BigQueryIO.<myCollectionObjectType>write()
            .to(new MyDataLoadClass.MyFactTableDestination(myDestination))
            .withFormatFunction(new MyDataLoadClass.MySerializationFn())

我已经看了这个问题:

Apache Beam: Skipping steps in an already-constructed pipeline

这表明我可以按照步骤1中的并行转换,以某种方式动态更改我可以将数据传递至的输出。

我该怎么做?我不知道如何选择是否将步骤1的myPCollection传递给步骤2。如果步骤1的myPCollection中的对象是null,则需要跳过步骤2。

1 个答案:

答案 0 :(得分:2)

如果您不希望在下一步中使用MyTransformClassName.MyTransformFn元素,就不会发出它,例如:

class MyTransformClassName.MyTransformFn extends...
  @ProcessElement
  public void processElement(ProcessContext c, ...) {
    ...
    result = ...
    if (result != null) {
       c.output(result);   //only output something that's not null
    }
  }

这样,null不会到达下一步。

有关更多详细信息,请参见指南的ParDo部分:https://pastebin.com/NHBVH29u