是否可以在不同的文件上编写窗口结果。意思是,我需要将时间附加到文件前缀或创建时间目录,以便我可以访问特定的窗口结果而无需额外的过滤器。 (就像apache-spark
)
答案 0 :(得分:2)
答案取决于您是在批处理还是流式处理模式下使用窗口。
在流媒体模式下,Cloud Dataflow Service不支持写入文件at this time。在这种情况下,您需要使用BigQuery接收器,我们支持每窗口分片。
代码示例(有关详细信息,请参阅Javadoc):
PCollection<TableRow> quotes = ...;
quotes.apply(Window.<TableRow>into(CalendarWindows.days(1)))
.apply(BigQueryIO.Write
.named("Write")
.withSchema(schema)
.to(new SerializableFunction<BoundedWindow, String>() {
public String apply(BoundedWindow window) {
// The cast below is safe because CalendarWindows.days(1) produces IntervalWindows.
String dayString = DateTimeFormat.forPattern("yyyy_MM_dd")
.withZone(DateTimeZone.UTC)
.print(((IntervalWindow) window).start());
return "my-project:output.output_table_" + dayString;
}
}));
在批处理模式下,TextIO.Write
没有为此目的准备好的方便方法,但您可以自己实现类似的东西而不会有太多麻烦。例如,实现此目的的方法是通过Partition
转换,其输出通过管道传输到单独的TextIO.Write
接收器。