2017-12-02 167 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版本? –

相关问题