2017-12-02 10 views
1

我正在遷移將FileBasedSink從2.0.0版擴展到2.2.0的自定義接收器。類已發生變化,增加了兩個類型參數:UserTDestinationTFileBasedSink的類型參數是什麼?

@Experimental(value=FILESYSTEM) 
public abstract class FileBasedSink<UserT,DestinationT,OutputT> 
extends java.lang.Object 
implements java.io.Serializable, HasDisplayData 

我檢查的FileBasedSink的文檔,但無法找到它的目的。

所有類型的參數只有OutputT有一個文檔:

* @param <OutputT> the type of values written to the sink.` 

回答

1

注意,這個API是being redesigned,並會在梁的下一個版本中被廢止。然而,與此同時:

  • UserT要寫入PCollection元素的類型 - 在WriteFiles轉換將適用於PCollection<UserT>
  • OutputT是將直接傳遞到您的接收器的Writer的低級別記錄類型。它不同於UserT,因爲一些信宿具有「格式化功能」,例如, Avro可以將任何記錄轉換爲GenericRecordUserT通過DynamicDestinations.formatRecord映射到OutputT
  • DestinationT是用於支持同時寫入多個目的地的邏輯類型,例如,將不同類型的事件寫入不同模式的Avro文件到不同的目錄中。 DestinationT用作要寫入記錄的分組鍵的排序,並且使用相同配置寫入具有相同DestinationT的記錄。參見FileBasedSink.DynamicDestinationsgetDestinationUserT記錄中提取目的地,並且一些其他方法產生給定目的地的配置,例如, DynamicAvroDestinations.getSchema

該API不是最優 - 例如,它將這些高級概念(用戶類型和目的地)引入特定於文件格式的代碼(例如寫入Avro文件)。這就是它被重新設計的原因。請繼續關注實施新API的PR https://github.com/apache/beam/pull/3817

+0

感謝您的解釋。從API的用戶角度來看,即使它不是最佳的,它也會被記錄下來,因爲這是用戶看到的。 在重新設計提交之前,您是否會建議保留2.0.0版本? –

相關問題