foreach_sink

@dp.foreach_sink()裝飾器定義一個ForEach匯入器,利用自訂的 Python 邏輯,一列一列地處理串流。 你在附加流程或更新流程中引用匯入target器來寫入資料。 關於概念指引、考量與範例,請參見 「使用 ForEach 匯入槽將每一列寫入管線」。 若想將每個微批次處理為資料框架,請參見 foreach_batch_sink。

Syntax

要從函數定義匯, ForEach 請用 裝飾函數 @dp.foreach_sink():

from pyspark import pipelines as dp

@dp.foreach_sink(name="<name>")
def row_handler(row):
    """
    Required:
      - `row`: a Row that contains one record of the stream.
    """
    # Your custom write logic here.
    # This function runs on the executors, so import any libraries it uses inside the function.

要從寫入物件定義 ForEach 匯入器,呼叫 dp.foreach_sink() 並傳遞該物件,參數為 writer :

from pyspark import pipelines as dp

class RowWriter:
    def open(self, partition_id, epoch_id):
        # Optional. Return False to skip the rows of this partition.
        return True

    def process(self, row):
        # Required. Called for each row.
        ...

    def close(self, error):
        # Optional. `error` is None if processing succeeded.
        ...

dp.foreach_sink(name="<name>", writer=RowWriter())

你也可以用參數傳遞函式到 ,dp.foreach_sink()func而不是使用 decorator,例如 dp.foreach_sink(name="<name>", func=row_handler)。

Parameters

Parameter Description
row Required. Row A 包含一條串流的記錄。 你的函式,或 process 寫入者的方法,每次通話都會收到一列。
name Optional. 一個獨特的名稱用來識別管線內的匯。 預設是函式名稱。 對於 writer 物件,預設為小寫的類別名稱。
func Optional. 管線對每一列呼叫的函式。 直接打電話dp.foreach_sink()時使用func,而不是當裝潢師。 你不能同時 func 通過 和 writer。
writer Optional. 一個實 process(row) 作方法的物件,並且可 open(partition_id, epoch_id) 選擇性地實現 and close(error) 方法。 把它當作關鍵字論證傳遞。 你不能同時 func 通過 和 writer。

寫字方法

寫入物件使用與 Apache Spark 結構化串流 foreach 寫入相同的方法。 對於每個微批次的每個分割,管線會呼叫 open,然後processopen如果返回 True,則每列呼叫 ,接著呼叫 close。 關於在結構化串流中撰寫自訂輸出的資訊,請參見 使用 foreachBatch 來寫入任意資料匯。

方法 Description
open(partition_id, epoch_id) Optional. 管線在處理微批次分割列之前,先呼叫此方法。 用它來開啟連線或開始交易。 返回 True 以處理分割區的各行,或 False 跳過它們。 如果寫入者沒有定義 open,管線會處理每個分割區的列。 partition_id 且 epoch_id 可在寫入同一匯流且完成完整刷新後重複。 在你用它們去重排之前,先看看 「處理失敗與重複列」。
process(row) Required. 管線對每一列呼叫此方法。
close(error) Optional. 管線在處理分割區的列後會呼叫此方法。 error 是處理資料列時發生的例外,或 None 是處理成功時發生的。 用它來拉近連結。 如果 open 開始交易,只有在 error 時 None才提交,否則回滾。