top of page

Arquivo no formato Parquet


O Apache Parquet é um formato de arquivo binário de código aberto que armazena dados em colunas, o que o torna mais eficiente do que outros formatos, como CSV ou JSON.

Para acessar a documentação clique aqui.

O Parquet é otimizado para processar grandes volumes de dados, e permite compactar cada coluna de forma diferente e tem uma organização interna dos dados semelhante a uma tabela do RDBMS (Sistema de Gerenciamento de Banco de Dados Relacional), com linhas e colunas. Ao contrário dessa tabela, os dados no Parquet são armazenados um ao lado do outro. Devido a sua estrutura colunar, ele fornece uma melhor compactação e desempenho ao se trabalhar com grandes quantidades de dados. Os metadados de um arquivo Parquet contém informações como versão, schema, tipo, entre outros pontos importantes e são gravados sempre após os dados.


Os metadados são segmentados em três partes:


  • metadados de arquivo (FileMetaData)

    armazenados no rodapé de cada arquivo e contém as seguintes informações:


▶ Versão do formato Parquet.

▶ Esquema de dados.

▶ Metadados da coluna (tipo, número de valores, localização, codificação).

▶ Número de grupos de linhas.

▶ Pares de valor-chave adicionais.


  • metadados de coluna (ColumnMetaData)

  • metadados de cabeçalho de página (PageHeader). No caso dos



Veja o comparativo de um arquivo parquet e um csv na tabela abaixo e para saber mais, clique no link databricks: clique aqui

Arquivo

Espaço utilizado

Tempo de execução

CSV

1 TB

236 segundos

Apache Parquet

130 GB

6,78 segundos



Parquet no VS Code


Para mexer com arquivos parquet no vscode podemos utilizar as bibliotecas pandas e pyarrow.

Para isso, é necessário ter Python instalado. Para instalar as bibliotecas mencionadas acima, abra o terminal do vs code e digite: pip install pandas pyarrow



Criar um arquivo .parquet com python


import pandas as pd

# Dados fictícios
dados = {
    "nome": [
        "amanda nascimento", "joão silva", "maria oliveira", 
        "carla souza", "lucas pereira", "renata almeida"
    ],
    "data_nasci": [
        "31/12/1992", "12/03/1990", "07/08/1995", 
        "23/01/1998", "10/11/1988", "27/06/1993"
    ],
    "cpf": [
        "006.444.556-01", "234.555.789-10", "111.222.333-44",
        "999.888.777-66", "555.666.777-88", "123.456.789-00"
    ],
    "curso": ["ads", "ti", "enfermagem", "direito", "engenharia", "medicina"],
    "idade": [34, 33, 28, 26, 35, 31]
}

# Criação do DataFrame
df = pd.DataFrame(dados)

# Salvando em formato Parquet
df.to_parquet("dados_alunos.parquet")
print("Arquivo Parquet criado com sucesso!")


Ler dados .parquet com python



import pandas as pd

def ler_parquet(caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet
    df = pd.read_parquet(caminho)
    
    # Exibe o conteúdo do arquivo
    print("Conteúdo do arquivo:")
    print(df)
    return df

# Chama a função para testar a leitura
ler_parquet()


Ler dados .parquet com SQL


No Vs Code, faça o download da extensão "Parquet Explorer"


Com a extensão "Parquet Explorer" devidamente instalada e habilitada, basta clicar no arquivo .parquet e irá abrir uma caixinha para você digitar os comandos em sql e ele carrega a consulta automaticamente, conforme imagem abaixo:



Consultar registros específicos .parquet


import pandas as pd
from lerArqParquet import ler_parquet  # Importa a função de leitura

def consultar_por_idade(min_idade, caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Filtra os dados para alunos com idade maior que a especificada
    resultado = df[df["idade"] > min_idade]
    print(f"Alunos com mais de {min_idade} anos:")
    print(resultado)

def consultar_por_curso(curso, caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Filtra os dados para alunos que estão no curso especificado
    resultado = df[df["curso"] == curso]
    print(f"Alunos do curso {curso}:")
    print(resultado)

def ordenar_por_idade(caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Ordena os alunos pela idade
    resultado = df.sort_values(by="idade")
    print("Alunos ordenados por idade:")
    print(resultado)

# Exemplos de uso
if __name__ == "__main__":
    consultar_por_idade(30)
    consultar_por_curso("ads")
    ordenar_por_idade()

Adicionar registro .parquet


import pandas as pd
from lerArqParquet import ler_parquet  # Importa a função de leitura

def adicionar_registro(dados, caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Cria um DataFrame a partir do novo registro
    novo_df = pd.DataFrame([dados])
    # Concatena o novo registro ao DataFrame existente
    df = pd.concat([df, novo_df], ignore_index=True)
    # Salva o DataFrame atualizado no arquivo Parquet
    df.to_parquet(caminho)
    print(f"Registro {dados} adicionado com sucesso.")

# Exemplo de uso
if __name__ == "__main__":
    novo_aluno = {
        "nome": "paulo santos",
        "data_nasci": "15/05/1992",
        "cpf": "987.654.321-10",
        "curso": "psicologia",
        "idade": 32
    }
    adicionar_registro(novo_aluno)


Deletar registro .parquet


import pandas as pd
from lerArqParquet import ler_parquet  # Importa a função de leitura

def deletar_registro(cpf, caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Exclui a linha que possui o CPF especificado
    df = df[df["cpf"] != cpf]
    # Salva o DataFrame atualizado no arquivo Parquet
    df.to_parquet(caminho)
    print(f"Registro com CPF {cpf} deletado com sucesso.")

# Exemplo de uso
if __name__ == "__main__":
    deletar_registro("987.654.321-10")

Atualizar registro .parquet


import pandas as pd
from lerArqParquet import ler_parquet  # Importa a função de leitura

def atualizar_registro(cpf, coluna, novo_valor, caminho="dados_alunos.parquet"):
    # Lê o arquivo Parquet existente
    df = ler_parquet(caminho)
    # Localiza a linha com o CPF especificado e atualiza o valor da coluna
    df.loc[df["cpf"] == cpf, coluna] = novo_valor
    # Salva o DataFrame atualizado no arquivo Parquet
    df.to_parquet(caminho)
    print(f"Registro com CPF {cpf} atualizado com sucesso.")

# Exemplo de uso
if __name__ == "__main__":
    atualizar_registro("987.654.321-10", "curso", "psicologia avançada")


Converter .parquet em .csv com python

import pandas as pd

def converter_parquet_para_csv(caminho_parquet="dados_alunos.parquet", caminho_csv="dados_alunos.csv"):
    # Lê o arquivo Parquet
    df = pd.read_parquet(caminho_parquet)
    # Salva como CSV com codificação UTF-8 e separador de vírgula
    df.to_csv(caminho_csv, index=False, encoding="utf-8", sep=",")
    print(f"Arquivo CSV salvo em: {caminho_csv}")

# Executa a função
if __name__ == "__main__":
    converter_parquet_para_csv()


bottom of page