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!

1
resposta

[Reclamação] Conteúdo do Spark vs. SQL

Boa tarde,

Estou revisando alguns conhecimentos de spark/databricks por fazer um certo tempo que não tenho contado... E estou com uma dúvida bem séria onde no curso é orientado usar SQL para consultas mais focadas em análises e PYSPARK para grande volumes. E até faz sentido mas dentro do databricks caso eu queria lidar com um volume de dados considerado grande e for fazer operações "simples"a nível de SQL onde não exige lógica complexa não vai mudar em nada o plano de execução por usar pyspark ou sql para fazer determinada transformação... O mecanimos é o mesmo a diferença é só o "parse" que o databricks faz por trás dos panos para gerar o plano de execução considerando SQL ou PYSPARK. E inclusive já parti do princípio em usar SQL em "n" projetos justamente para "fugir" da complexidade do spark visando também que o time irá dar manutenções e é muito mais simples de entender todo o fluxo... Enfim caso tenha algum erro no que estou reportando, me falem pois pelo pouco que sei acredito que não tem diferença.

1 resposta

Oii, Vinicius! Tudo bem?

Seu raciocínio faz sentido quanto a diferença entre usar PySpark ou SQL para transformação de dados no Databricks.Tanto o PySpark DataFrame API quanto o Spark SQL são apenas duas interfaces diferentes para o mesmo motor de execução. Por trás dos panos, o Databricks utiliza o Catalyst Optimizer para transformar qualquer uma das duas sintaxes em um plano lógico e, depois, em um plano físico otimizado, que roda sobre o Tungsten Execution Engine. Ou seja, para transformações equivalentes, o plano de execução gerado é praticamente idêntico, mudando só a camada de "parse" inicial, exatamente como você descreveu.

Isso significa que, para operações mais simples (filtros, agregações, joins básicos), a escolha entre SQL e PySpark é mais uma questão de produtividade da equipe e legibilidade do código do que de performance bruta. Veja este exemplo:


# Usando PySpark DataFrame API
df_pyspark = spark.table("vendas").filter("valor > 1000").groupBy("regiao").sum("valor")
df_pyspark.explain(True)

# Usando Spark SQL
df_sql = spark.sql("""
    SELECT regiao, SUM(valor) as total
    FROM vendas
    WHERE valor > 1000
    GROUP BY regiao
""")
df_sql.explain(True)

Se você rodar o metodo explain(True) nos dois casos, vai perceber que o plano fisico final gerado pelo Catalyst e praticamente o mesmo, confirmando exatamente o que voce apontou.

O ponto onde a diferença de performance realmente aparece é quando entram UDFs em Python (funções definidas pelo usuário) dentro do PySpark, pois nesse caso os dados saem da JVM, passam pelo processo Python e voltam, gerando um overhead de serialização que o SQL puro não tem. Fora esse cenário específico, sua estratégia de priorizar SQL para facilitar manutenção do time e reduzir complexidade é uma prática totalmente válida e bem recomendada em times de engenharia de dados.

Uma sugestão é usar SQL quando a lógica for declarativa e o time preferir, e PySpark quando precisar de controle programático, UDFs otimizadas (via pandas_udf) ou integração com Python. Ótimo que você conseguiu identificar isso sozinho antes mesmo de perguntar.

E você, costuma decidir entre SQL e PySpark caso a caso no seu time, ou existe um padrão definido no projeto para isso?

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