Isso é data skew: uma chave concentra uma fatia desproporcional das linhas, então uma única partição faz quase todo o trabalho depois de um shuffle. Confirme olhando a distribuição da chave de join ou de agrupamento. Resolva habilitando o tratamento de skew join do adaptive query execution, fazendo broadcast do lado pequeno se ele couber, aplicando salting na chave quente para espalhá-la por várias partições, ou filtrando e processando as chaves discrepantes separadamente.
Por que os entrevistadores perguntam isso
Skew é o problema de performance mais comum no Spark, e o caminho de diagnóstico mostra se você realmente já leu uma Spark UI. Os entrevistadores querem que você confirme o skew com dados em vez de adivinhar, e que saiba que aumentar executors ou memória não ajuda, porque o gargalo é uma partição e não a capacidade total.
Como estruturar sua resposta
- Nomeie o skew e explique por que uma partição domina depois de um shuffle.
- Confirme: cheque a distribuição da chave e a dispersão de duração das tasks do stage.
- Descarte a não solução de simplesmente adicionar executors.
- Dê as soluções em ordem: broadcast, skew join do AQE, salting, isolar a chave.
- Mencione os nulos como culpado escondido frequente.
Exemplo de resposta
Uma cauda longa em uma task quase sempre significa skew: depois do shuffle, uma chave caiu em uma partição e essa partição tem a maioria das linhas. Primeiro eu confirmo em vez de presumir, então um group by na chave de join com um count, e uma olhada no stage na Spark UI onde a duração máxima da task e o shuffle read são muito maiores que a mediana. Jogar executors no problema não faz nada, porque o trabalho não está distribuído. A solução depende do formato. Se o outro lado do join é pequeno, faça broadcast dele e pule o shuffle inteiro. Se ele é realmente grande dos dois lados, o adaptive query execution consegue dividir partições com skew automaticamente, e além disso eu aplico salting: acrescento um sufixo aleatório à chave quente, replico o lado pequeno por esses sufixos, faço o join e depois agrego. O que pega as pessoas são os nulos. Nós tínhamos uma chave de join que era nula em cerca de 40% das linhas, todas com o mesmo hash e na mesma partição, e filtrar os nulos antes do join resolveu de imediato.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como o adaptive query execution detecta uma partição com skew?
- Qual é o risco de fazer broadcast de uma tabela grande demais?
- Como você aplicaria salting em um join sem mudar os resultados?
Mais perguntas para Engenheiro de Dados
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas