我正在使用Apache Beam来建立包含2个主要步骤的管道:
管道设置如下:
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。
答案 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