IForeachWriter 接口

定义

用于编写自定义逻辑以处理查询生成的数据的接口。 这通常用于将流式查询的输出写入任意存储系统。

public interface IForeachWriter
type IForeachWriter = interface
Public Interface IForeachWriter

注解

Spark 将按以下方式使用此接口的任何实现:

  • 此类的单个实例负责查询中单个任务生成的所有数据。 换句话说,一个实例负责处理以分布式方式生成的数据的一个分区。
  • 此类的任何实现都必须是 SerializableAttribute ,因为每个任务都将获得所提供对象的全新序列化反序列化副本。 因此,强烈建议在调用 方法后 Open(Int64, Int64) 完成任何用于写入数据 (例如打开连接或启动事务) 的初始化,这表示任务已准备好生成数据。
  • 方法的生命周期如下:

重要注意事项:

  • 当故障导致重新处理某些输入数据时, partitionIdepochId 可用于删除生成的重复数据。 这取决于查询的执行模式。 如果在微批处理模式下执行流式处理查询,则由唯一元组表示的每个分区 (partition_id,epoch_id) 保证具有相同的数据。 因此, (partition_id、epoch_id) 可用于删除重复数据并/或以事务方式提交数据,并实现精确一次的保证。 但是,如果流式处理查询以连续模式执行,此保证就不成立,因此不应用于重复数据删除。

方法

Close(Exception)

停止处理执行程序端中新数据的一个分区时调用。 这保证称为 返回Open(Int64, Int64)truefalse。 但在 Close(Exception) 以下情况下,不会调用 :

Open(Int64, Int64)

在开始处理执行程序中新数据的一个分区时调用。

Process(Row)

调用 以处理 Row 执行程序端中的每个对象。 仅当返回 trueOpen,才会调用此方法。

适用于