Estágio Spark longo com uma tarefa
Um estágio de longa execução com apenas uma tarefa não tem paralelismo. Enquanto a tarefa está em execução, uma CPU faz o trabalho e o restante do cluster pode estar parado. Adicionar workers não ajuda, porque o Spark não pode distribuir o trabalho entre eles.
Use esta página quando o estágio mais longo tiver exatamente uma tarefa. Se o estágio tiver muitas tarefas, verifique-o em relação a desequilíbrio de dados (skew) e spill. Veja Desequilíbrio de dados (skew) e spill.
Causas e correções comuns
Um estágio de tarefa única geralmente tem uma destas causas. Encontre aquela que corresponde ao seu código e, em seguida, aplique a correção:
- Uma UDF cara em dados pequenos. Pequenas entradas podem terminar em uma única partição, então uma tarefa executa toda a UDF. Reescreva a UDF usando funções nativas, se puder. Caso contrário,
repartition()o DataFrame antes de aplicar a UDF. Veja UDFs lentas. - Uma função de janela sem
PARTITION BY. Sem uma cláusulaPARTITION BY, a janela abrange todo o dataset, portanto, uma tarefa processa todas as linhas. Adicione uma cláusulaPARTITION BYse a sua lógica permitir. - Tipo de arquivo que não pode ser dividido. O Spark não consegue ler arquivos como arquivos gzip em várias partes, por isso uma tarefa grande lê cada arquivo. Se você ler os mesmos arquivos repetidamente, ingira-os uma vez em uma tabela Delta Lake e query a tabela.
- A opção
multiLineem leituras JSON ou CSV. DefinamultiLineapenas quando os registros abrangerem várias linhas. Consulte Ler arquivos JSON com várias linhas. - Inferência de esquema em um arquivo grande. Especifique o esquema em vez de inferi-lo. Consulte Specify a schema.
repartition(1)oucoalesce(1). Esses forçam todos os dados em uma partição. Remova-os ou use mais partições, a menos que precise de um único arquivo de saída.