Questão de Banco de Dados — Banco de Dados Paralelos e Distribuídos — FCC 2026
Banco de Dados›Banco de Dados Paralelos e Distribuídos
Código
fc077594
Banca
FCC
Órgão
SEFAZ-SP
Ano
2026
Nível
Superior
Cargo
Auditor Fiscal da Receita Estadual - AFRE - Tecnologia da Informação e Comunicação - Conhecimentos Especificos (P3)
Uma equipe de auditoria possui uma tabela de NF-e com mais de 1 bilhão de registros em um pyspark.sgl.DataFrame chamado df. A auditora deseja inspecionar apenas 1.000 registros localmente em seu notebook, usando funcionalidades avangadas de pandas para buscar inconsisténcias. Nesse cenário, a abordagem em PySpark mais apropriada para gerar esses registros em um pandas. DataFrame, minimizando o risco de estouro de memória no ambiente local é:
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
PySpark: Amostragem Segura para Pandas
Gabarito: letra C. A abordagem mais apropriada é usar df.limit(1000).toPandas() porque, ao limitar o número de linhas antes da coleta, apenas 1000 registros são trazidos para a memória local, minimizando drasticamente o risco de estouro. As demais opções ou coletam todo o DataFrame (A e D), ou usam amostragem por fração que pode resultar em muitas linhas (B), ou são redundantes e ineficientes (E).
Alternativa
Descrição
Resultado
Risco de Estouro de Memória
Adequação ao Pedido (1000 registros exatos)
A
df.toPandas() coleta todo o DF, depois amostra em pandas
Coleta massiva de >1 bi de linhas
Altíssimo (quase certo)
Sim (após coleta massiva)
B
df.sample(False, 0.001) coleta ~1 milhão de linhas
~1.000.000 linhas (probabilístico)
Alto (1 milhão de linhas)
Não (número não exato e muito maior)
C
df.limit(1000).toPandas() coleta apenas 1000 linhas
Exatas 1000 linhas
Mínimo
Sim
D
df.collect() coleta todo o DF, depois fatia 1000
Coleta massiva de >1 bi de linhas
Altíssimo (quase certo)
Sim (após coleta massiva)
E
df.head(1000) coleta 1000, recria DF, depois coleta de novo
Exatas 1000 linhas (mas processo redundante)
Mínimo (mas ineficiente)
Sim (mas redundante)
Alternativa A — ❌ Incorreta
df.toPandas() coleta todo o DataFrame (mais de 1 bilhão de linhas) para a memória do driver, causando quase certo estouro de memória local. A amostragem posterior em pandas não evita o problema inicial.
Alternativa B — ❌ Incorreta
df.sample(False, 0.001, seed=42) gera aproximadamente 1 milhão de linhas (0,1% de 1 bilhão), muito mais que as 1000 desejadas. Além disso, o número exato não é garantido (é probabilístico), o que contraria o pedido da auditora.
Alternativa C — ✅ Correta ⟵ GABARITO
df.limit(1000).toPandas() é a abordagem ideal: o Spark primeiro seleciona apenas 1000 linhas (não necessariamente aleatórias, mas cabe à auditora aceitar isso) e depois converte esse pequeno subconjunto para pandas. O risco de estouro de memória é mínimo.
Alternativa D — ❌ Incorreta
df.collect() traz todas as linhas para o driver, e só então fatia as 1000 primeiras. O problema é o mesmo de A: coleta massiva que provoca estouro de memória antes mesmo da fatia.
Alternativa E — ❌ Incorreta
df.head(1000) já coleta as 1000 linhas para o driver, mas em seguida spark.createDataFrame recria um DataFrame distribuído (desnecessário) e depois .toPandas() coleta novamente. Embora o volume final seja pequeno, a etapa head() já realizou a coleta, e o processo é redundante e menos eficiente que o limit() direto.
PEGA ESSA DICA!
Sempre que precisar de uma amostra pequena e exata em PySpark para análise local, use df.limit(N).toPandas(). Se for aceitável uma amostra aleatória com tamanho aproximado, use sample() com fração, mas lembre-se de que o número de linhas não é exato. Para inspeção de um número fixo e pequeno de registros, limit() é a ferramenta certa.