当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyspark DataStreamWriter.foreach用法及代码示例


本文简要介绍 pyspark.sql.streaming.DataStreamWriter.foreach 的用法。

用法:

DataStreamWriter.foreach(f)

设置要使用提供的编写器 f 处理的流式查询的输出。这通常用于将流式查询的输出写入任意存储系统。可以通过两种方式指定处理逻辑。

  1. A 函数将一行作为输入。

    这是一种表达处理逻辑的简单方法。请注意,当故障导致重新处理某些输入数据时,这不允许您对生成的数据进行重复数据删除。这将要求您以下一种方式指定处理逻辑。

  2. 一个对象process方法和可选openclose方法。

    该对象可以有以下方法。

    • open(partition_id, epoch_id)可选的初始化处理的方法

      (例如,打开连接、启动事务等)。此外,您可以使用partition_idepoch_id 对重新生成的数据进行重复数据删除(稍后讨论)。

    • process(row)非可选处理每个的方法Row.

    • close(error)可选的最终确定和清理的方法(例如,

      关闭连接、提交事务等)在处理完所有行之后。

    Spark 将通过以下方式使用该对象。

    • 此对象的单个副本负责由

      查询中的单个任务。也就是说,一个实例负责处理分布式生成的数据的一个分区。

    • 这个对象必须是可序列化的,因为每个任务都会得到一个新的

      serialized-deserialized 提供对象的副本。因此,强烈建议在调用 open(…) 方法后完成写入数据的任何初始化(例如打开连接或启动事务),这表示任务已准备好生成数据。

    • 方法的生命周期如下。

      对于每个带有 partition_id 的分区:

      …对于每个批次/纪元的流数据 epoch_id

      ……。方法open(partitionId, epochId) 被调用。

      ……。如果 open(...) 返回 true,则对于分区中的每一行和

      批次/纪元,方法process(row) 被调用。

      ……。调用方法 close(errorOrNull) 时出现错误(如果有),而

      处理行。

    需要注意的要点:

    • partitionIdepochId 可用于在以下情况下对生成的数据进行重复数据删除

      故障会导致重新处理某些输入数据。这取决于查询的执行模式。如果在micro-batch模式下执行流式查询,则保证由唯一元组(partition_id,epoch_id)表示的每个分区都具有相同的数据。因此,(partition_id, epoch_id) 可用于重复数据删除和/或事务性提交数据并实现exactly-once 保证。但是,如果流式查询以连续模式执行,则此保证不成立,因此不应用于重复数据删除。

    • close() 方法(如果存在)将在 open() 方法存在并且

      成功返回(与返回值无关),除非 Python 在中间崩溃。

2.4.0 版中的新函数。

注意

这个 API 正在发展。

例子

>>> # Print every row using a function
>>> def print_row(row):
...     print(row)
...
>>> writer = sdf.writeStream.foreach(print_row)
>>> # Print every row using a object with process() method
>>> class RowPrinter:
...     def open(self, partition_id, epoch_id):
...         print("Opened %d, %d" % (partition_id, epoch_id))
...         return True
...     def process(self, row):
...         print(row)
...     def close(self, error):
...         print("Closed with error: %s" % str(error))
...
>>> writer = sdf.writeStream.foreach(RowPrinter())

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.sql.streaming.DataStreamWriter.foreach。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。