Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

3
respostas

[Sugestão] Solução ao erro da criação do DataFrame (localmente)

Eu instalei a versão mais nova do pyspark:

pip install pyspark==3.5.1

E o código ficou assim:

# Não precisa mais de: import findspark; findspark.init()
from pyspark.sql import SparkSession

# Inicializa a sessão direto (o Python já sabe onde o PySpark está)
spark = SparkSession.builder \
    .master('local[*]') \
    .appName("Iniciando com Spark") \
    .getOrCreate()

# Cria o DataFrame
data = [('Zeca', '35'), ('Eva', '29')]
colNames = ['Nome', 'Idade']
df = spark.createDataFrame(data, colNames)

# Mostra o resultado na tela
df.show()

Lembre-se de restartar o kernel e lembrando que eu estou usando Python 3.11 e o Java 17, caso apareça o erro Py4JJavaError ao tentar iniciar a sessão spark, instale novamente o Java, no meu caso é a versão 17 e mude o código, mas sempre lembrando de restartar o kernel:

import os
from pyspark.sql import SparkSession

# Define o caminho do Java para o sistema operacional
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-17-openjdk-amd64"

# Inicializa a sessão do Spark
spark = SparkSession.builder \
    .master('local[*]') \
    .appName("Iniciando com Spark") \
    .getOrCreate()

# Cria o DataFrame
data = [('Zeca', '35'), ('Eva', '29')]
colNames = ['Nome', 'Idade']
df = spark.createDataFrame(data, colNames)

# Mostra o resultado
df.show()
3 respostas

Olá, William! Como vai?

Agradeço por compartilhar essa sugestão conosco!

Vi que você explorou a configuração do SparkSession para inicializar o ambiente com PySpark, utilizou muito bem a criação de DataFrame para manipular dados e ainda compreendeu a importância da integração com Java para evitar erros como o Py4JJavaError.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Gerenciar dependências: usar ambientes virtuais (venv ou conda) para manter versões consistentes.
  • Testes com dados maiores: validar o funcionamento do Spark com datasets mais robustos para simular cenários reais.
  • Configurações externas: definir variáveis como JAVA_HOME em arquivos de configuração ou variáveis de ambiente do sistema.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você acha que centralizar a inicialização do Spark em uma função utilitária ajuda a manter o código mais limpo e reutilizável ou prefere configurar diretamente em cada script para ter maior controle?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Obrigado pelo retorno. Eu acredito que centralizar a inicialização em uma função utilitária a longo prazo, pensando da evolução do projeto e manter o código limpo.

Olá, William! Tudo bem?

Sua visão está muito alinhada com boas práticas de arquitetura de software.

Centralizar a inicialização em uma função utilitária realmente traz benefícios a longo prazo:

  • Código mais limpo: evita duplicação e deixa o fluxo mais claro.
  • Escalabilidade: facilita evoluir o projeto sem perder consistência.
  • Manutenção simplificada: qualquer ajuste na inicialização é feito em um único ponto.
  • Reuso: a mesma função pode ser aplicada em diferentes contextos, mantendo um padrão.

Essa abordagem mostra maturidade no desenvolvimento, porque você já está pensando não apenas no funcionamento imediato, mas na evolução do projeto e na clareza do código para quem for dar manutenção depois.

Parabéns pela escolha estratégica!