2
respostas

Tempo de Execução Comandos SPARK

Criei uma função de valida CPF's e queria validar um conjunto de 10000000 dados, para isso eu criei um dataframe spark com os CPF's e usei um filtro para pegar somente os CPF's validos, quando tento mostrar alguns dos CPF's validos na tela, o programa fica executando e não termina, demora muito tempo para aparecer, por exemplo, os 5 primeiros

2 respostas

Oi, Moisés! Como você está?

Puxa, que situação curiosa! Existem alguns possíveis motivos para isso estar acontecendo, acompanhe comigo:

O Spark realiza operações de maneira "lazy", ou seja, ele não executa imediatamente as transformações quando são definidas, mas sim quando uma ação é chamada. No seu caso, a ação é o comando para mostrar os CPFs válidos — logo, ao tentar apresentá-los, por baixo dos panos continuam sendo feitas as validações anteriores, fazendo com que o processo seja mais demorado.

Além disso, a validação de CPF é uma operação que pode ser computacionalmente custosa, dependendo de como foi implementada. Se você está realizando essa operação em um DataFrame de 10 milhões de linhas, isso pode levar algum tempo, Moisés.

Nesse sentido, como não tenho acesso ao seu projeto, trago apenas algumas sugestões que podem te ajudar:

  • Um ponto importante é tentar simplificar/otimizar os códigos que você desenvolveu para filtrar os CPFs válidos;

  • Ademais, sugiro realizar, inicialmente, testes com conjuntos de dados menores (com quantidades inferiores a 10 milhões de linhas). Com isso, você poderá identificar possíveis problemas que estão impactando no resultado final.

Espero que as explicações e dicas sejam úteis para você, Moisés! Vale ressaltar que como é um assunto externo aos cursos da Alura e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema!

Um forte abraço.

Oi Adrieli, eu estava usando uma função dentro de um filtro:

df = spark.range(1000000001).select(format_string("%011d", col("id")).alias("cpf"))

valida_cpf_udf = udf(checaCPF, BooleanType())

df_validos = df.filter(valida_cpf_udf("cpf")) df_validos.show()

Mas estranhamente, depois de reiniciar o computador funcionou perfeitamente. Agradeço a explicação :)