Ciência e Dados
Menu
  • Home
  • Sobre
  • Contato
Menu
pyspark

10 Dicas Para Melhorar a Performance do PySpark

Posted on 16 de agosto de 202316 de agosto de 2023 by David Matos

O PySpark pode ser um grande consumidor de recursos, principalmente quando você está trabalhando com grandes conjuntos de dados. Ajustar as configurações pode ajudar a otimizar o uso de memória e melhorar o desempenho.

Aqui estão alguns parâmetros e dicas que você pode considerar:

1- Configurações de Memória Executora: A memória executora é usada para armazenar os dados dos RDDs, broadcasts, acumuladores, etc. Ajuste essa configuração de acordo com suas necessidades através do parâmetro abaixo (que pode ser usado no Spark Submit ou definido no arquivo de configurações do Spark):

conf.set(“spark.executor.memory”, “4g”)

2- Configurações de Memória do Driver: Ajuste a quantidade de memória usada pelo processo do driver, que coordena os executores. Use o parâmetro abaixo:

conf.set(“spark.driver.memory”, “2g”)

3- Configuração de Memória de Armazenamento e Memória Shuffle: Você pode dividir a memória executora em duas regiões: a região de armazenamento que armazena os dados dos RDDs persistentes, e a região de shuffle que armazena os dados intermediários da computação com o parâmetro abaixo:

conf.set(“spark.memory.storageFraction”, “0.5”)

4- Memória Off-Heap: Isso permite o uso de memória fora do heap da JVM.

conf.set(“spark.memory.offHeap.enabled”, True)
conf.set(“spark.memory.offHeap.size”, “2g”)

5- Garbage Collection (GC) Tuning: O uso extensivo de GC pode afetar o desempenho. Você pode ajustar a JVM para usar o G1GC, que geralmente é mais eficiente.

conf.set(“spark.executor.extraJavaOptions”, “-XX:+UseG1GC”)

6- Reparticionar os Dados: Se você sabe que está trabalhando com um número menor de partições do que os executores disponíveis, pode reparticionar os dados de acordo. Menos partições podem economizar memória.

7- Persistência com Níveis de Armazenamento: Utilize persist() ou cache() com um nível de armazenamento apropriado, como MEMORY_AND_DISK para armazenar os RDDs nos quais você está realizando várias operações, para evitar o recomputing.

8- Broadcasting: Se você está realizando uma operação de join em uma tabela grande e uma tabela pequena, o broadcasting da tabela pequena pode tornar o join mais eficiente.

9- Desabilitar o Caching de Broadcast: Se você está enfrentando problemas de OOM (Out of Memory), considere desabilitar o caching de broadcast com o parâmetro abaixo:

conf.set(“spark.sql.autoBroadcastJoinThreshold”, “-1”)

10- Usar Tipos de Dados Adequados: Certifique-se de usar os tipos de dados adequados para suas colunas, o que pode economizar uma quantidade significativa de memória.

Bônus: Desabilitar o Log Detalhado: Os logs são importantes, mas logs detalhados podem consumir mais memória, então configure o nível de log para algo como WARN ou ERROR.

Mais possibilidades podem ser encontradas aqui: Spark Configuration.

David Matos

Referências:

Machine Learning e IA em Ambientes Distribuídos

Compartilhar

  • Clique para compartilhar no X(abre em nova janela) 18+
  • Clique para compartilhar no Facebook(abre em nova janela) Facebook
  • Clique para compartilhar no LinkedIn(abre em nova janela) LinkedIn
  • Clique para compartilhar no WhatsApp(abre em nova janela) WhatsApp
  • Clique para compartilhar no Telegram(abre em nova janela) Telegram
  • Clique para compartilhar no Tumblr(abre em nova janela) Tumblr
  • Clique para compartilhar no Pinterest(abre em nova janela) Pinterest

Relacionado

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Buscar

Tags Mais Comuns nos Posts

Agentes de IA Analytics Análise de Negócios Apache Spark AWS Big Data Blockchain Business Intelligence ChatGPT Cientista de Dados Cientistas de Dados Ciência de Dados Cloud Computing Data Lake Data Mesh Data Science Data Scientist Data Warehouse Deep Learning Deploy Engenharia de Dados Estatística GPU GraphRAG Hadoop IA Generativa Inteligência Artificial Internet of Things Linguagem Python Linguagem R LLM LLMs Machine Learning MCP (Model Context Protocol) Metadados Normalização NVIDIA Oracle Pipeline de Dados Predictive Analytics Probabilidade PySpark Python RAG Storytelling

Histórico de Posts

  • maio 2025 (6)
  • abril 2025 (2)
  • março 2025 (4)
  • fevereiro 2025 (8)
  • janeiro 2025 (5)
  • dezembro 2024 (4)
  • novembro 2024 (1)
  • outubro 2024 (1)
  • setembro 2024 (1)
  • agosto 2024 (1)
  • julho 2024 (3)
  • junho 2024 (1)
  • maio 2024 (1)
  • abril 2024 (2)
  • março 2024 (1)
  • fevereiro 2024 (1)
  • janeiro 2024 (1)
  • dezembro 2023 (1)
  • outubro 2023 (2)
  • setembro 2023 (1)
  • agosto 2023 (4)
  • julho 2023 (2)
  • junho 2023 (4)
  • maio 2023 (2)
  • abril 2023 (2)
  • março 2023 (3)
  • fevereiro 2023 (3)
  • janeiro 2023 (3)
  • dezembro 2022 (7)
  • novembro 2022 (6)
  • outubro 2022 (2)
  • setembro 2022 (3)
  • agosto 2022 (2)
  • julho 2022 (2)
  • junho 2022 (3)
  • maio 2022 (1)
  • abril 2022 (3)
  • março 2022 (1)
  • fevereiro 2022 (3)
  • janeiro 2022 (2)
  • dezembro 2021 (1)
  • novembro 2021 (5)
  • outubro 2021 (2)
  • setembro 2021 (3)
  • agosto 2021 (1)
  • junho 2021 (1)
  • fevereiro 2021 (2)
  • janeiro 2021 (1)
  • dezembro 2020 (1)
  • novembro 2020 (1)
  • outubro 2020 (2)
  • agosto 2020 (1)
  • abril 2020 (1)
  • março 2020 (1)
  • fevereiro 2020 (2)
  • agosto 2019 (1)
  • abril 2019 (1)
  • setembro 2018 (2)
  • julho 2018 (1)
  • junho 2018 (3)
  • abril 2018 (1)
  • março 2018 (1)
  • fevereiro 2018 (2)
  • janeiro 2018 (1)
  • dezembro 2017 (1)
  • novembro 2017 (1)
  • outubro 2017 (1)
  • setembro 2017 (1)
  • julho 2017 (1)
  • junho 2017 (1)
  • maio 2017 (2)
  • abril 2017 (1)
  • janeiro 2017 (1)
  • novembro 2016 (1)
  • outubro 2016 (1)
  • setembro 2016 (1)
  • julho 2016 (1)
  • junho 2016 (1)
  • maio 2016 (1)
  • abril 2016 (1)
  • fevereiro 2016 (1)
  • janeiro 2016 (3)
  • dezembro 2015 (4)
  • novembro 2015 (6)
  • outubro 2015 (9)
  • setembro 2015 (9)
  • agosto 2015 (9)
©2025 Ciência e Dados