Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Paralelos e Distribuídos — FCC 2026

Banco de DadosBanco 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 é:
  1. Apdf = df.toPandas ()pdf_sample = pdf.sample (n=1000, random_state=42)
  2. Bsample df = df.sample(False, 0.001, seed=42)pdf_sample = sample_df.toPandas()
  3. Cpdf_sample = df.limit (1000).toPandas ()
  4. Drows = df.collect()pdf_sample = pd.DataFrame (rows[:1000])
  5. Epdf_sample = spark.createDataFrame (df.head (1000)).toPandas ()
Revelar gabarito e comentário

GabaritoC — pdf_sample = df.limit (1000).toPandas ()

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.

Gabarito: letra C.

Link permanente: /questoes/fc077594