Google cloud dataflow 在Apache Beam中的每个窗口成功发出输出文件后,是否有办法创建最后创建的空文件?

Google cloud dataflow 在Apache Beam中的每个窗口成功发出输出文件后,是否有办法创建最后创建的空文件?,google-cloud-dataflow,apache-beam,apache-beam-io,Google Cloud Dataflow,Apache Beam,Apache Beam Io,我有一个流式管道,它使用带有时间戳的事件。我所要做的就是将它们批处理到每个5分钟的FixedWindow中,然后根据碎片将窗口中的所有事件写入单个/多个文件,最后使用空文件(只有在该窗口中的所有事件成功发送到文件中后才应创建此文件) 基本上我希望这样的输出 |---窗口\u 1\u输出\u文件 |---窗口\u 1\u空\u文件(仅应在创建窗口\u 1\u输出\u文件后创建此文件) 使用触发的窗口策略如下: timestampedLines = timestampedLines.apply("F

我有一个流式管道,它使用带有时间戳的事件。我所要做的就是将它们批处理到每个5分钟的FixedWindow中,然后根据碎片将窗口中的所有事件写入单个/多个文件,最后使用空文件(只有在该窗口中的所有事件成功发送到文件中后才应创建此文件)

基本上我希望这样的输出

|---窗口\u 1\u输出\u文件

|---窗口\u 1\u空\u文件(仅应在创建窗口\u 1\u输出\u文件后创建此文件)

使用触发的窗口策略如下:

timestampedLines = timestampedLines.apply("FixedWindows", Window.<String>into(
            FixedWindows.of(Utilities.resolveDuration(options.getWindowDuration())))
            .triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(options.getWindowElementCount())))
            .withAllowedLateness(Utilities.resolveDuration(options.getWindowLateness()))
            .accumulatingFiredPanes()
timestadedlines=timestadedlines.apply(“FixedWindows”,Window.into(
FixedWindows.of(Utilities.resolveDuration(options.getWindowDuration()))
.triggering(重复.forever(AfterPane.ElementCount至少(options.getWindowElementCount()))
.withAllowedLateness(Utilities.resolveDuration(options.GetWindowLatenness()))
.累积燃烧烷()
在Apache Beam中的每个窗口成功发出输出文件后,是否有办法创建这个最终创建的空文件?在哪里应用此逻辑来创建这个额外的空文件


提前谢谢。

您能这样做吗:

//每个窗口生成一个元素
PCollection清空=p.apply(GenerateSequence.from(0)
.withRate(1,Utilities.resolveDuration(options.getWindowDuration()))
.apply(maplements.into(typedescriptor.strings()).via(elm->“”);
//您的实际PCollection数据
PCollection myActualData=p.apply。。。。。。。。。。。
PCollection myActualDataWithDataOnEveryWindow=
PCollectionTuple.of(清空)和(myActualData).apply(展平.create());
一旦每个窗口中都有一个元素,就可以执行您正在执行的操作:

myActualDataWithDataOnEveryWindow.apply(“FixedWindows”,Window.into(
FixedWindows.of(Utilities.resolveDuration(options.getWindowDuration()))
.triggering(重复.forever(AfterPane.ElementCount至少(options.getWindowElementCount()))
.withAllowedLateness(Utilities.resolveDuration(options.GetWindowLatenness()))
.累积FiredPanes())
.申请(文件……);

这是否为您指出了一些有用的地方?或者我太迷路了吗?:)

如何执行切分?是否基于时间戳收集数据?是基于时间戳。如何定义getWindowElementCount()中的元素数方法?它是静态值还是动态值?mk_sta您使用什么来写入文件?FileIO?-我想说的是,您可以向您的PCollection中添加某种类型的空元素…windows元素计数是作为输入逻辑长时间延迟传递的值,与其他优先级一样。这非常有用,并为我提供了处理是的。谢谢如果我理解你的建议是正确的,你的意思是说为窗口添加一个空元素,这样每个窗口在被移植到文件系统时,都会创建输出文件+空文件。是吗?它将如何同步,因为只有在成功创建窗口输出文件后,才会创建空文件ly?当您将两个PCollection展平时,它们会同步(请参见第一个代码块中的最后一行)。这就是您要问的吗?太好了。当我们展平两个PCollection(实际和空)时,这是否确保只有在发出实际文件后才为该窗口创建空文件(即,展平将确保顺序)因为PCollections是由单个工人处理的?我们可以使用@onwindowtermination注释创建空文件吗?这样可以确保每个窗口调用一次(窗口结束)?