在不同的文件上写入 window 明智的结果
write window wise result on different file
是否可以在不同的文件上写入 window 明智的结果。意思是,我需要将时间附加到文件前缀或创建时间明智的目录,以便我可以访问特定的 window 结果而无需额外的过滤器。 (就像apache-spark
)
答案取决于您是在批处理模式还是流模式下使用窗口。
在流模式下,云数据流服务不支持写入文件at this time。在这种情况下,您需要改用 BigQuery 接收器,我们支持 per-window 分片。
代码示例(有关详细信息,请参阅 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
接收器。
是否可以在不同的文件上写入 window 明智的结果。意思是,我需要将时间附加到文件前缀或创建时间明智的目录,以便我可以访问特定的 window 结果而无需额外的过滤器。 (就像apache-spark
)
答案取决于您是在批处理模式还是流模式下使用窗口。
在流模式下,云数据流服务不支持写入文件at this time。在这种情况下,您需要改用 BigQuery 接收器,我们支持 per-window 分片。
代码示例(有关详细信息,请参阅 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
接收器。