foreach_sink
O decorador @dp.foreach_sink() define um sink ForEach, que processa uma transmissão uma linha de cada vez com lógica Python personalizada. Você faz referência ao sink como um target em um fluxo de adição ou um fluxo de atualização para gravar os dados. Para obter orientação conceitual, considerações e exemplos, consulte Usar um sink ForEach para gravar cada linha em pipelines. Para processar cada micro-lote como um DataFrame, consulte foreach_batch_sink.
Sintaxe
Para definir um sink ForEach a partir de uma função, decore a função com @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.
Para definir um sink ForEach de um objeto de gravador, chame dp.foreach_sink() e passe o objeto com o argumento 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())
Você também pode passar uma função para dp.foreach_sink() com o argumento func em vez de usar o decorador, por exemplo dp.foreach_sink(name="<name>", func=row_handler).
Parâmetros
Parâmetro | Descrição |
|---|---|
row | Obrigatório. Uma |
name | Opcional. Um nome exclusivo para identificar o sink dentro do pipeline. O default é o nome da função se não for especificado. Para um objeto writer, o default é o nome da classe em minúsculas. |
func | Opcional. A função que o pipeline chama para cada linha. Use |
writer | Opcional. Um objeto que implementa o método |
Métodos de writer
Um objeto escritor usa os mesmos métodos que o escritor foreach do Structured Streaming do Apache Spark. Para cada partição de cada micro-lote, o pipeline chama open, então chama process para cada linha se open retornar True, e então chama close. Para obter informações sobre como gravar saídas personalizadas no Structured Streaming, consulte Usar foreachBatch para gravar em coletores de dados arbitrários.
Método | Descrição |
|---|---|
| Opcional. O pipeline chama esse método antes de processar as linhas de uma partição para um micro-lotes. Use-o para abrir conexões ou começar transações. Retorne |
| Obrigatório. O pipeline chama esse método para cada linha. |
| Opcional. O pipeline chama esse método depois de processar as linhas da partição. |