當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。