Paralelizando Tarefas Independentes com Apache Beam
Apache Beam permite a execução de múltiplas tarefas em paralelo a partir de uma única PCollection, o que é útil para realizar transformações distintas e independentes ao mesmo tempo. Nesse post, vamos aprender como criar e executar duas tarefas paralelamente em Apache Beam usando uma única PCollection como entrada.
Em vez de aplicar transformações sequenciais, como vimos nos exemplos anteriores, aqui vamos criar duas tarefas independentes que serão executadas paralelamente, cada uma operando sobre a mesma PCollection de dados de entrada.
Como Paralelizar Tarefas Independentes
Para paralelizar tarefas independentes em Apache Beam, usamos o conceito de encadeamento de transformações que são executadas simultaneamente. Podemos criar duas pipelines diferentes a partir de uma única PCollection e aplicar transformações distintas em cada uma delas. Essa abordagem permite que tarefas como filtragem e agregação sejam feitas de forma paralela.
Vamos ver um exemplo em Python em que paralelizamos duas tarefas diferentes: uma para contar o número de palavras e outra para filtrar palavras que começam com uma letra específica.
Exemplo de Código: Paralelizando Tarefas Independentes
Aqui está o exemplo onde paralelizamos duas tarefas com a mesma entrada:
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
# Função de separação de palavras
def split_words(line):
return line.split()
# Função para contar palavras
def count_words(words):
return [(word, 1) for word in words]
# Função para filtrar palavras que começam com a letra 'A'
def filter_words(words):
return [word for word in words if word.startswith('A')]
# Configurações do pipeline
options = PipelineOptions()
# Criando o pipeline
with beam.Pipeline(options=options) as p:
# PCollection de entrada
input_data = (
p
| 'Ler entrada' >> beam.Create([
'Apache Beam facilita o processamento de dados',
'Ele é poderoso e flexível',
'A paralelização é a chave para escalabilidade'
])
)
# Primeira tarefa: Contar palavras
word_counts = (
input_data
| 'Dividir em palavras' >> beam.FlatMap(split_words)
| 'Contar palavras' >> beam.FlatMap(count_words)
| 'Somar contagens' >> beam.CombinePerKey(sum)
| 'Escrever contagens' >> beam.Map(print)
)
# Segunda tarefa: Filtrar palavras que começam com 'A'
filtered_words = (
input_data
| 'Dividir em palavras (Filtro)' >> beam.FlatMap(split_words)
| 'Filtrar palavras A' >> beam.FlatMap(filter_words)
| 'Escrever palavras filtradas' >> beam.Map(print)
)
Explicando o Pipeline
beam.Create: Cria uma PCollection com os dados de entrada.beam.FlatMap: Aplica uma função que divide as linhas em palavras para ambas as tarefas.beam.FlatMap(count_words): Conta as palavras, retornando pares de (palavra, 1), que são somados combeam.CombinePerKey.beam.FlatMap(filter_words): Filtra palavras que começam com a letra "A".beam.Map(print): Imprime os resultados no console para ambas as tarefas.
Comando para Rodar o Pipeline
Para rodar o pipeline, basta executar o seguinte comando no terminal:
python nome_do_arquivo.py
Substitua nome_do_arquivo.py pelo nome do arquivo que contém o código Python do pipeline. O Apache Beam irá paralelizar as duas tarefas simultaneamente, cada uma operando na mesma PCollection de entrada.
Saída Esperada
O pipeline gera duas saídas independentes:
Contagem de Palavras
('Apache', 1)
('Beam', 1)
('facilita', 1)
('o', 1)
('processamento', 1)
('de', 1)
('dados', 1)
('Ele', 1)
('é', 1)
('poderoso', 1)
('flexível', 1)
('A', 1)
('paralelização', 1)
('é', 1)
('chave', 1)
('para', 1)
('escalabilidade', 1)
Palavras Filtradas que Começam com 'A'
Apache
A
Benefícios de Paralelizar Tarefas em Apache Beam
- Eficiência: Executar múltiplas tarefas simultaneamente reduz o tempo total de execução do pipeline.
- Escalabilidade: A paralelização permite escalar os pipelines de maneira fácil, aproveitando múltiplos núcleos de CPU ou nós de computação.
- Manutenção Simples: Mesmo com tarefas paralelizadas, o código continua simples e fácil de entender.
Para mais informações sobre como paralelizar transformações e outros recursos avançados do Apache Beam, consulte a documentação oficial do Apache Beam.
Agora que você aprendeu como paralelizar tarefas em Apache Beam, experimente criar seus próprios pipelines com tarefas independentes. Se tiver dúvidas ou quiser compartilhar suas experiências, deixe nos comentários.
Comentários
Postar um comentário