2016-01-25 58 views
0

是否有可能在不同的文件上寫入明智的結果?意思是,我需要追加時間文件前綴或時間智慧的目錄,以便我可以訪問特定的窗口結果,而無需額外的過濾器。 (如apache-spark在不同的文件上寫入明智的結果

回答

2

答案取決於您是以批處理模式還是流模式使用窗口。

在流模式下,雲數據流服務不支持寫入文件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匯。