Um shuffle join reparticiona os dois lados pela chave de join através da rede, para que chaves iguais caiam no mesmo executor, o que é caro. Um broadcast join envia a tabela menor inteira para cada executor, então o lado maior é unido localmente sem shuffle. Use broadcast quando o lado pequeno cabe com folga na memória do executor, ajuste o limite de auto broadcast e garanta que as estatísticas estão corretas para o planejador escolher direito.
Por que os entrevistadores perguntam isso
A estratégia de join é de onde vem a maior parte dos ganhos reais de tuning no Spark, então os entrevistadores usam isso para medir se você entende execução distribuída ou apenas chama a API. Eles querem a restrição de memória do broadcast, o papel das estatísticas de tabela nas decisões do planejador e a consciência de que um broadcast errado causa falhas de out of memory no driver ou no executor.
Como estruturar sua resposta
- Descreva a movimentação física dos dados em cada estratégia.
- Diga a condição de tamanho que torna o broadcast viável.
- Explique como o planejador decide e em quais estatísticas ele se apoia.
- Dê o modo de falha de fazer broadcast de algo grande demais.
- Mencione bucketing como forma de evitar shuffles repetidamente.
Exemplo de resposta
Um shuffle join move os dois datasets pela rede para que linhas com a mesma chave terminem na mesma partição, o que significa serialização, spill em disco e muito tráfego de rede. Um broadcast join evita tudo isso enviando a tabela pequena para cada executor e fazendo um hash join local, então a tabela grande nunca se move. O planejador escolhe broadcast automaticamente quando acredita que um dos lados está abaixo do limite de auto broadcast, que por padrão fica em torno de 10MB, e a palavra acredita está fazendo todo o trabalho aí. Se as estatísticas estão desatualizadas ou a origem é um scan de arquivos sem estatísticas, ele vai errar, então eu rodo ANALYZE ou uso uma dica explícita de broadcast. O modo de falha vale conhecer: fazer broadcast de uma tabela que na verdade tem dois gigabytes coleta tudo pelo driver e mata o job. Para joins que repetíamos de hora em hora na mesma chave, aplicar bucketing nas tabelas por essa chave eliminou o shuffle de vez.
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
- O que acontece no driver durante um broadcast?
- Como o bucketing evita um shuffle, e quanto ele custa?
- Quando um sort merge join ganharia de um hash join?
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