2

我正在迁移将 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.`
4

1 回答 1

1

请注意,此 API正在重新设计,并将在 Beam 的下一版本中弃用。然而,与此同时:

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

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

于 2017-12-04T21:48:22.540 回答