FileBasedSink的类型参数是什么?

时间:2017-12-02 21:38:18

标签: java apache-beam apache-beam-io

我正在迁移一个自定义接收器,将FileBasedSink从2.0.0版扩展到2.2.0版。该类已更改并添加了两个额外的类型参数:UserTDestinationT

@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 个答案:

答案 0 :(得分:1)

请注意,此API为being redesigned,将在下一版本的Beam中弃用。但是,同时:

  • UserT是要写入的PCollection元素的类型 - WriteFiles转换适用于PCollection<UserT>
  • OutputT是将直接传递到接收器Writer的低级记录类型。它与UserT不同,因为有些接收器具有“格式功能”,例如Avro可以将任何记录转换为GenericRecordUserT通过OutputT映射到DynamicDestinations.formatRecord
  • DestinationT是用于支持同时写入多个目的地的逻辑类型,例如将不同类型的事件写入不同目录中具有不同模式的Avro文件。 DestinationT用作要写入的记录的分组键,并且使用相同的配置写入具有相同DestinationT的记录。请参阅FileBasedSink.DynamicDestinationsgetDestinationUserT记录中提取目的地,并且一系列其他方法会生成给定目的地的配置,例如DynamicAvroDestinations.getSchema

此API不是最佳的 - 例如它将这些高级概念(用户类型和目标)引入特定于文件格式的代码(例如,写入Avro文件)。这就是重新设计的原因。请继续关注实施新API的PR https://github.com/apache/beam/pull/3817