Pergunta de entrevista para Desenvolvedor Python

Como você processaria um CSV de quarenta gigabytes que não cabe na memória?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Faça streaming. Abra o arquivo e itere linha por linha, ou use csv.reader sobre o objeto de arquivo, para só uma linha ficar residente por vez, e empurre cada registro por estágios de generator em vez de montar listas intermediárias. Escreva no destino em lotes de alguns milhares. Se o trabalho for CPU bound, divida por faixas de bytes entre processos.

Por que os entrevistadores perguntam isso

Isso checa se streaming é o seu instinto ou uma reflexão tardia. Os entrevistadores veem bastante candidato que recorre a pandas read_csv por reflexo e depois descobre que o container é morto. Eles também querem ouvir pensamento operacional: capacidade de reinício, acompanhamento de progresso, escritas em lote, e saber quando a resposta certa é parar de escrever Python e carregar o arquivo no banco.

Como estruturar sua resposta

  • Comprometa-se com streaming em vez de carregar tudo.
  • Descreva o pipeline de generators e as escritas em lote.
  • Adicione capacidade de reinício e relato de progresso.
  • Diga quando você passaria isso para outra ferramenta.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Nada é carregado inteiro. Um objeto de arquivo já é um iterador sobre linhas, então eu leio linha por linha com csv.reader e encadeio estágios de generator para parsing, filtragem e transformação, o que mantém o pico de memória em cerca de um registro independente do tamanho do arquivo. As escritas vão em lote, tipicamente alguns milhares de linhas por insert, porque round trips linha a linha para o Postgres dominam tudo o mais. Como quarenta gigabytes demora, eu deixo o processo reiniciável: rastreio o offset de bytes ou a última chave processada num arquivinho de estado, logo progresso a cada cem mil linhas, e faço a escrita idempotente com upsert para que uma reexecução não duplique. Se o parsing acabar sendo o gargalo em vez do I/O, eu divido o arquivo por offsets de bytes e passo as faixas para um process pool, com cuidado de alinhar nas quebras de linha. Sinceramente, porém, minha primeira sugestão costuma ser pular o Python na carga por completo e usar o bulk copy do banco, e depois fazer a transformação em SQL, porque isso geralmente é uma ordem de magnitude mais rápido.

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 funciona

Perguntas de acompanhamento que você pode esperar

  • Como você lida com linhas malformadas no meio do stream?
  • Polars ou duckdb mudariam sua resposta?
  • Como você tornaria o processo retomável exatamente uma vez?

Mais perguntas para Desenvolvedor Python

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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot