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()