在不同的文件上写入 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 接收器。