Converter Parquet para NDJSON

Aqui você converte Parquet para NDJSON de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.

  • Onde roda No seu navegador. O arquivo nunca é enviado.
  • Sem perdas Nada é descartado. O NDJSON guarda exatamente o que o Parquet guardava.
  • Limite de tamanho Até 100 MB por arquivo, de graça e sem conta.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

O único alvo de texto que mantém os tipos de coluna

Um arquivo Parquet declara o tipo de cada coluna no seu rodapé. Converta para CSV ou texto separado por tabulação e essa declaração se perde: todo valor vira caractere, e o que ler o arquivo depois infere tipos de novo — geralmente diferente, e sempre sem o benefício do esquema que estava ali do lado.

JSON tem tipos próprios: número continua número, booleano continua booleano, e nulo continua nulo. Isso não é uma diferença pequena quando o destino é um serviço ou uma fila com esquema, porque remove uma categoria inteira de erro de integração.

Aninhamento sobrevive como string, uma camada aquém de estrutura

Este é o limite que vale conhecer antes de construir algo em cima da saída. Parquet guarda lista, struct e mapa nativamente, e essas colunas são escritas no JSON como strings contendo JSON, não como JSON aninhado de verdade. Uma coluna lista chega como "[\"a\",\"b\"]" — um registro correto e completo do valor, mas uma camada de codificação aquém de ser estrutura.

É um passe para consertar: jq -c '.tags |= fromjson' sobre o arquivo transforma esse campo num array de verdade. O que importa é saber disso, porque um campo que parece aninhado numa revisão de código e é uma string em tempo de execução é uma coisa desagradável de descobrir num teste de integração.

Timestamps viram strings ISO, a resposta honesta

JSON não tem tipo de data. Uma coluna de timestamp então é escrita como string ISO 8601 — 2024-03-11T09:30:00.000Z — que toda linguagem, banco de dados e validador de esquema interpreta sem precisar de um formato declarado, e que ordena cronologicamente como texto simples.

A alternativa seria um número epoch, e é pior num registro que uma pessoa possa precisar ler: um campo com 1710149400000 é ininteligível sem saber a época e a unidade.

Inteiros grandes viram strings em vez de perder dígitos

Parquet tem inteiro de 64 bits, e números JSON, na prática, ficam limitados ao que os leitores em cada ponta conseguem representar exatamente — para a maioria isso são 53 bits. Um valor além disso não pode ser carregado como número sem mudar.

A conversão escreve esses como string. Um valor dentro da faixa segura continua número; um fora dela vira string com cada dígito intacto. Se o destino tem esquema, declare esse campo como string e converta na chegada.

Um registro por linha, sem array em volta

O arquivo é um objeto JSON completo por linha e nada mais — sem colchete de abertura, sem vírgula entre registros, sem colchete de fechamento. Um leitor esperando um array JSON falha na segunda linha, e isso é o formato funcionando como pretendido, não uma falha.

O que a ausência compra é que um consumidor lê uma linha, age sobre ela, descarta e segue em frente, qualquer que seja o tamanho do arquivo. Também torna a saída endereçável por linha: head -n 1000 dá uma amostra válida, split -l produz pedaços carregáveis.

Reproduzindo um extrato Parquet numa fila ou API

É a forma comum deste trabalho. Uma tabela vive numa plataforma de dados, e algo fora dela — um índice de busca, uma fila de mensagens, um serviço sendo repovoado — fala JSON e nunca ouviu falar de Parquet. NDJSON é o formato que fica entre os dois, e não precisa de estrutura além de uma quebra de linha.

Um laço de shell lendo linhas e postando cada uma basta para um backfill pequeno. A primeira coisa a checar é o nome dos campos: uma plataforma de dados dá nomes moldados pelo pipeline que a produziu, e um serviço costuma querer outra coisa.

Nulos continuam nulos em vez de virarem vazio

Um nulo numa coluna Parquet é escrito como null no JSON, preservando uma distinção que nenhum formato delimitado consegue carregar: nulo e string vazia são valores diferentes, e chegam diferentes.

Isso importa onde o destino tem esquema. Um campo declarado string vai recusar nulo a menos que seja declarado anulável, e um validador avisa em qual registro isso aconteceu, em vez de reportar um erro de análise na linha errada.

O tamanho, e por que isso não é um formato de armazenamento

A saída é bem maior que o arquivo de origem. Toda linha repete todo nome de campo, toda string vai entre aspas, e nada da compressão, codificação por dicionário ou representação binária que deixava o Parquet pequeno sobrevive em texto.

Isso é aceitável porque este arquivo é um artefato de transporte: existe para ser lido uma vez por um consumidor e depois apagado, e a cópia durável continua sendo o Parquet.

Onde o extrato é lido e o que limita a contagem de linhas

O leitor Parquet é uma biblioteca carregada sob demanda por esta página, e o JSON é escrito ali, então nenhuma requisição carrega o arquivo. Para um extrato tirado do meio de uma plataforma — antes da agregação, antes da mascaragem — isso costuma decidir se um conversor online pode ser usado.

Toda linha é materializada antes de qualquer coisa ser escrita, então a memória é o teto. Para uma tabela grande, DuckDB lê o Parquet e escreve NDJSON numa única instrução sem manter nenhum dos dois na memória inteiro.

Quando o arquivo Parquet deveria continuar como está

Se o consumidor consegue ler Parquet, deixe. Todo data warehouse, todo motor de consulta e a maioria das bibliotecas de dados modernas leem, e passar o original preserva o esquema e mantém a transferência pequena.

Converta quando o consumidor de fato só fala JSON, o que é a maioria dos serviços, filas e índices de busca. É uma divisão real e permanente — sistemas operacionais trocam registros, sistemas analíticos trocam colunas — e esta conversão é a ponte entre eles, não um substituto para nenhum dos dois.

Como converter Parquet para NDJSON

  1. Solte o seu arquivo Parquet nesta página, ou clique para escolher um.
  2. Escolha NDJSON como destino. A conversão acontece no seu navegador e o arquivo não é enviado.
  3. Baixe o arquivo NDJSON pronto.

Parquet ou NDJSON: o que muda

Parquet comparado com NDJSON
ParquetNDJSON
Nome completoApache ParquetNewline-Delimited JSON
Extensão do arquivo.parquet.ndjson, .jsonl
Tipo de mídiaapplication/vnd.apache.parquetapplication/x-ndjson
CompressãoSem perdas — nada é descartado
Publicado pela primeira vez20132013
Publicado porApache Software Foundation
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarCSV, JSONJSON, CSV

O que se mantém

Nada é descartado. Parquet e NDJSON guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

O que o formato de destino acrescenta

NDJSON é formato de trabalho e Parquet é formato pronto. Volta texto editável em vez de uma imagem da página, o que costuma ser o motivo da conversão e também o seu limite.

Abrir o resultado

pandas lê tanto Parquet quanto NDJSON, então dá para comparar o resultado com o original sem um segundo programa.

Para que serve cada formato

NDJSON e de 2013. jq e pandas leem o formato.

De Parquet para NDJSON: perguntas frequentes

Meu arquivo Parquet é enviado para algum lugar?

Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo. O motor deste par específico é parquet-wasm, uma compilação em WebAssembly do leitor do Apache Arrow; seu navegador baixa isso uma vez e guarda.

Converter Parquet para NDJSON é grátis?

É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez. parquet-wasm é baixado para a sua máquina e roda lá, e por isso não há contador.

Perde qualidade ao converter Parquet para NDJSON?

Não. NDJSON guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original.

A conversão de Parquet para NDJSON é sem perda?

Nada é descartado. Parquet e NDJSON guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

O arquivo NDJSON pode ser editado depois?

NDJSON é formato de trabalho e Parquet é formato pronto. Volta texto editável em vez de uma imagem da página, o que costuma ser o motivo da conversão e também o seu limite.

Mais sobre esses formatos