O Lazy Evaluation?
Lazy Evaluation (ou "Avaliação Preguiçosa") é um conceito em programação e computação onde a avaliação de uma expressão é adiada até que o valor da expressão seja efetivamente necessário. Isso pode levar a otimizações significativas de desempenho, reduzindo a quantidade de cálculos realizados e, em alguns casos, evitando completamente certas avaliações.
Quando usamos as funções select, filter ou groupBy no Spark, o driver armazena as informações dessas transformações. Estas são categorizadas como 'narrow' e 'wide' transformations no Spark (abordaremos esse tema mais adiante). O resultado destas transformações só será retornado ao executarmos ações, como count, collect ou max, que demandam uma resposta imediata para o usuário.
E quais os benefícios Lazy Evaluation (avaliação preguiçosa)?
- Melhora a eficiência: O otimizador Catalyst do Spark agrupará as operações, reduzindo o número de repasses de dados e melhorando o desempenho.
- Melhor Legibilidade: Como você sabe que o Spark agrupará as operações e otimizará o código nos bastidores, você pode organizar seu programa usando operações menores que melhorarão a legibilidade e a manutenção do código.
- Gerenciamento de memória: Se as transformações do Spark fossem ávidas, você teria que armazenar todos os Dataframes/RDDs intermediários em algum lugar ou, no mínimo, gerenciar a memória se tornaria outra preocupação sua.
Quando usamos as funções select, filter ou groupBy no Spark, o driver armazena as informações dessas transformações. Estas são categorizadas como 'narrow' e 'wide' transformations no Spark (abordaremos esse tema mais adiante). O resultado destas transformações só será retornado ao executarmos ações, como count, collect ou max, que demandam uma resposta imediata para o usuário.
E quais os benefícios Lazy Evaluation (avaliação preguiçosa)?
- Melhora a eficiência: O otimizador Catalyst do Spark agrupará as operações, reduzindo o número de repasses de dados e melhorando o desempenho.
- Melhor Legibilidade: Como você sabe que o Spark agrupará as operações e otimizará o código nos bastidores, você pode organizar seu programa usando operações menores que melhorarão a legibilidade e a manutenção do código.
- Gerenciamento de memória: Se as transformações do Spark fossem ávidas, você teria que armazenar todos os Dataframes/RDDs intermediários em algum lugar ou, no mínimo, gerenciar a memória se tornaria outra preocupação sua.
Referências
Explain Spark Lazy Evaluation in Detail
Lazy Evaluation in Apache Spark
3 Reasons Why Spark's Lazy Evaluation is Useful