foreach_sink
Le décorateur @dp.foreach_sink() définit un sink ForEach, qui traite un stream une ligne à la fois avec une logique Python personnalisée. Vous référencez le sink en tant que target dans un append flow ou un update flow pour écrire les données. Pour des conseils conceptuels, des considérations et des exemples, voir Utiliser un sink ForEach pour écrire chaque ligne dans les pipelines. Pour traiter chaque micro-batch comme un DataFrame à la place, voir foreach_batch_sink.
Syntaxe
Pour définir un récepteur ForEach à partir d'une fonction, décorez la fonction avec @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.
Pour définir un récepteur ForEach à partir d’un objet writer, appelez dp.foreach_sink() et passez l’objet avec l’argument 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())
Vous pouvez également transmettre une fonction à dp.foreach_sink() avec l’argument func au lieu d’utiliser le décorateur, par exemple dp.foreach_sink(name="<name>", func=row_handler).
Paramètres
parameter | Description |
|---|---|
row | Obligatoire. Un |
Nom | Facultatif. Un nom unique pour identifier le récepteur dans le pipeline. default le nom de la fonction est utilisé. Pour un objet writer, le nom de la classe en minuscules est utilisé default. |
fonction | Optionnel. La fonction que le pipeline appelle pour chaque ligne. Utilisez |
writer | Facultatif. Objet qui implémente la méthode |
Méthodes d'écriture
Un objet writer utilise les mêmes méthodes que le writer foreach de Structured Streaming pour Apache Spark. Pour chaque partition de chaque micro-batch, le pipeline appelle open, puis appelle process pour chaque ligne si open retourne True, et appelle ensuite close. Pour plus d'informations sur l'écriture de sorties personnalisées dans Structured Streaming, voir Utiliser foreachBatch pour écrire dans des récepteurs de données arbitraires.
Méthode | Description |
|---|---|
| Facultatif. Le pipeline appelle cette méthode avant de traiter les lignes d’une partition pour un micro-batch. Utilisez-le pour ouvrir des connexions ou start des transactions. Retourner |
| Obligatoire. Le pipeline appelle cette méthode pour chaque ligne. |
| Facultatif. Le pipeline appelle cette méthode après avoir traité les lignes de la partition. |