【发布时间】:2017-05-06 08:39:11
【问题描述】:
我目前正在创建一个 PCollectionView,方法是从 gcs 存储桶中读取过滤信息,并将其作为侧输入传递到管道的不同阶段,以过滤输出。如果 gcs 存储桶中的文件发生更改,我希望当前正在运行的管道使用这个新的过滤器信息。如果我的过滤器发生变化,有没有办法在每个新的数据窗口上更新这个 PCollectionView?我以为我可以在 startBundle 中做到这一点,但我不知道如何或是否可能。可以的话可以举个例子吗?
PCollectionView<Map<String, TagObject>>
tagMapView =
pipeline.apply(TextIO.Read.named("TagListTextRead")
.from("gs://tag-list-bucket/tag-list.json"))
.apply(ParDo.named("TagsToTagMap").of(new Tags.BuildTagListMapFn()))
.apply("MakeTagMapView", View.asSingleton());
PCollection<String>
windowedData =
pipeline.apply(PubsubIO.Read.topic("myTopic"))
.apply(Window.<String>into(
SlidingWindows.of(Duration.standardMinutes(15))
.every(Duration.standardSeconds(31))));
PCollection<MY_DATA>
lineData = windowedData
.apply(ParDo.named("ExtractJsonObject")
.withSideInputs(tagMapView)
.of(new ExtractJsonObjectFn()));
【问题讨论】: