FileBasedSink 的类型参数是什么?

What are the type parameters for FileBasedSink?

我正在将扩展 FileBasedSink 的自定义接收器从版本 2.0.0 迁移到 2.2.0。 class 已更改并添加了两个额外的类型参数: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.`

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

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

这 API 不是最优的 - 例如它将这些高级概念(用户类型和目标)引入到特定于文件格式的代码中(例如写入 Avro 文件)。这就是它被重新设计的原因。请继续关注实施新 API.

的 PR https://github.com/apache/beam/pull/3817