Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Referenciando o df no s3.put_objects

Olá!

Me surgiu uma dúvida no "for" para subirmos os arquivos em parquet para o bucket.

Na funcionalidade "put_objects", mais especificamente no "Body", como foi referenciado que íamos subir o arquivo em parquet referente a um df? Quando faz a conversão pelo "Parquet_Buffer" fica salvo de alguma forma nele o arquivo que foi convertido, por isso o .getvalue() ? E em cada ciclo do for esse "conteúdo" do parquet_buffer é resetado?

Muito obrigado!

1 resposta
solução!

Ooi, Hugo! Tudo bem?

A função parquet_buffer.getvalue() é a chave para entendermos como o arquivo Parquet é enviado para o S3. Vou deixar mais detalhes sobre esse processo para que você possa entender passo a passo:

parquet_buffer = BytesIO(): Aqui, é criado um objeto BytesIO que funciona como um buffer em memória. Ele é como um espaço temporário para armazenar dados binários.

df.to_parquet(parquet_buffer): O df.to_parquet() converte o DataFrame para o formato Parquet e, em vez de salvar em um arquivo físico, ele escreve os dados diretamente no parquet_buffer.

parquet_buffer.getvalue(): Essa função pega o conteúdo do parquet_buffer e o retorna como uma string de bytes. É como se estivéssemos "lendo" o arquivo Parquet que foi gravado no buffer.

s3.put_object(..., Body=parquet_buffer.getvalue()): O Body é o conteúdo que será enviado para o S3. Ao usar parquet_buffer.getvalue(), estamos enviando o arquivo Parquet que está armazenado no buffer.

De maneira geral, podemos entender que:

  • parquet_buffer é um espaço temporário para armazenar o arquivo Parquet.
  • df.to_parquet() escreve o arquivo Parquet no parquet_buffer.
  • parquet_buffer.getvalue() pega o conteúdo do parquet_buffer como uma string de bytes.
  • s3.put_object() envia o conteúdo do parquet_buffer para o S3.

Em cada ciclo do for:

  • Um novo parquet_buffer é criado, garantindo que cada DataFrame seja convertido para Parquet e enviado para o S3 separadamente.
  • O conteúdo do parquet_buffer é "resetado" a cada iteração, pois ele é um buffer em memória.

Desejo sucesso! Continue firme nos estudos! ✨✨

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!