Questão nº 14

Questão de Ciência de Dados · FGV SEFAZ-MG 2022 - Tarde (nº 14)

FGV2022Auditor Fiscal - Tecnologia da InformaçãoCiência de Dados
Gabarito: Bver comentário ↓
1. linhas = sc.textFile("dados.txt")
2. linhasComprimento = linhas.map(lambda s: len(s))
3. totalComprimento = linhasComprimento.reduce(lambda a, b: a + b)

Em relação ao código pyspark acima, assinale a afirmativa incorreta.

Resposta comentada

Gabarito Alternativa B

Spark RDDs (Resilient Distributed Datasets) são coleções de dados imutáveis e distribuídas. Eles são a abstração fundamental do Spark para trabalhar com dados. O Spark opera com o conceito de avaliação preguiçosa (lazy evaluation): as transformações (como map, filter) apenas definem um plano de execução e criam um novo RDD, mas não executam o cálculo imediatamente. O cálculo só é disparado quando uma ação (como reduce, count, collect) é invocada, que então executa todo o plano de transformações desde a origem dos dados.

  • (A) Incorreta: Esta afirmação é correta. A primeira linha (sc.textFile("dados.txt")) cria um RDD (linhas) que representa as linhas do arquivo dados.txt. No entanto, devido à avaliação preguiçosa do Spark, os dados do arquivo não são carregados na memória neste momento; apenas o RDD (o plano de como acessar e processar esses dados) é definido.
  • (B) Correta: Esta afirmação é incorreta, e por isso é o gabarito. A variável linhas é essencialmente um ponteiro ou uma referência para a origem dos dados (o arquivo dados.txt) e para o "plano" de como processar esses dados (o lineage das transformações). Ela não contém os dados em si, mas sim a receita ou o grafo de computação para obtê-los. Dizer que "não é apenas um ponteiro para o arquivo" é incorreto porque, no contexto da avaliação preguiçosa, um RDD é fundamentalmente uma referência ao dado de origem e ao plano de computação, e não o dado carregado na memória. A armadilha da banca aqui é a palavra "apenas": ao afirmar que "não é apenas um ponteiro", a frase sugere que a variável linhas contém mais do que uma referência (talvez os próprios dados), o que é falso.
  • (C) Incorreta: Esta afirmação é correta. A segunda linha (linhasComprimento = linhas.map(lambda s: len(s))) aplica a transformação map ao RDD linhas, criando um novo RDD (linhasComprimento) que, quando computado, conterá os comprimentos das linhas.
  • (D) Incorreta: Esta afirmação é correta. Como map é uma transformação, e o Spark usa avaliação preguiçosa, o cálculo dos comprimentos das linhas não é realizado imediatamente quando linhasComprimento é definido. Ele só será executado quando uma ação for chamada posteriormente.
  • (E) Incorreta: Esta afirmação é correta. A terceira linha (totalComprimento = linhasComprimento.reduce(lambda a, b: a + b)) invoca a operação reduce, que é uma ação no Spark. As ações são o que disparam a execução do grafo de computação (o lineage dos RDDs) para produzir um resultado final.

Fonte: FGV SEFAZ-MG 2022 - Tarde Auditor Fiscal - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho