5
respostas

Linguagem usada e desempenho do spark

Na aula, o professor está usando comandos spark para passar instruções SQL, mas eu poderia usar %sql e usar comandos do próprio SQL. Minha dúvida é se haverá alguma diferença no desempenho da execução ao se alterar a linguagem?

5 respostas

Sim. Pelo menos na teoria quando se utiliza um comando do spark o processamento deste comando será realizado em um cluster, ou seja, se for necessário processar uma grande quantidade de dados neste comando o spark irá fatiar esta operação em diversas partes que serão processadas em diversos nós (máquinas/processadores) diminuindo assim o tempo de processamento.

Não sei se a pergunta ficou clara. Pq tu pode um comando em um servidor spark usando linguagens diferentes Veja, eu posso usar %python E em outra célula %sql Ou ainda %java

Imagine que são os mesmos comandos em cada célula. Todos eles sendo executados em um servidor spark. Por baixo dos panos ele irá transformar cada um dos comandos em Scala e executar. Minha dúvida é: spark.sql('select * from table') será executado mais rápido que %sql select * from table? O servidor aceita os dois.

Ótima pergunta, não encontrei nenhuma resposta clara, mas parece que os métodos que não são do pyspark não são processados em cluster, ou seja, vão ser processados como um comando python normal. Acredito que não faria sentido o desenvolvimento de tantas libs e métodos praticamente redudantes, assim o Spark seria apenas um interpretador e executor de código python para clusters.

Se encontrar alguma resposta sobre esse assunto por favor compartilhe aqui.

Eu fiz uns testes no trabalho. Tenho acesso ao databricks. Fiz uma contagem simples de 1 a 1.000.000 com scala e com python. Os tempos foram respectivamente 0,4 s e 10 s. Foi humilhante pro python. Quero ver se ao trabalhar com dataframes a diferença tb será tão gritante. Mas esse é um teste que ainda irei fazer. Mas isso já sana minha dúvida. Linguagens diferentes possuem desempenho diferente dentro do servidor.

Vi um questionamento similar ao seu no stackoverflow e a resposta lá foi que somente os dataframes são divididos em RDD's, logo qualquer outro processamento feito em outra estrutura de dado será processada pelo interpretador em apenas um executor.

Tenta executar no databricks o carregamento de um dataframe grande e fazer o mesmo processamento usando pandas e outro usando o spark, por exemplo um ordenamento.