Skip to content
Parquet Parciação por Conteúdo (CDC) com Xet: uploads mais rápidos e deduplicação inteligente
Source: huggingface.co

Parquet Parciação por Conteúdo (CDC) com Xet: uploads mais rápidos e deduplicação inteligente

Sources: https://huggingface.co/blog/parquet-cdc, Hugging Face Blog

TL;DR

  • Parquet Content-Defined Chunking (CDC) está disponível no PyArrow e no Pandas, permitindo deduplicação eficiente na camada de armazenamento Xet da Hugging Face.
  • CDC deduplica dados entre repositórios, reduzindo uploads, downloads e custos de armazenamento.
  • Ative a função com use_content_defined_chunking=True ao escrever Parquet (PyArrow); o suporte também chega ao Pandas.
  • A abordagem utiliza chunking com base no conteúdo antes da serialização e compressão, otimizando cargas de trabalho com Parquet no Hub.
  • Demonstrações com o conjunto OpenOrca mostram reduções significativas na transferência de dados e operações mais rápidas com CDC.

Contexto e antecedentes

Parquet é um formato de armazenamento em coluna amplamente utilizado. A Hugging Face hospeda quase 21 PB de datasets, com arquivos Parquet respondendo por mais de 4 PB desse armazenamento. Para lidar com essa escala, a Hugging Face introduziu uma nova camada de armazenamento chamada Xet, que usa chunking definido pelo conteúdo para deduplicar trechos de dados. Essa abordagem reduz custos de armazenamento e acelera uploads e downloads, especialmente quando vários fluxos de trabalho compartilham dados semelhantes ou em evolução. O CDC de conteúdo se situa ao lado das capacidades de deduplicação do Xet. O layout do Parquet—organizado por colunas e por blocos de coluna (páginas de dados) com compressão—pode gerar representações em bytes diferentes para mudanças pequenas. O CDC mitiga isso dividindo as páginas de dados com base no conteúdo, alinhando a deduplicação com os valores lógicos das colunas. Isso ajuda o Xet a reconhecer com mais eficiência quando o conteúdo permanece o mesmo. O texto também observa que, desde o PyArrow 21.0.0, URIs Hugging Face (hf://) podem ser usados diretamente no PyArrow para ler e escrever Parquet (e outros formatos) no Hub, facilitando a integração em fluxos de dados. A combinação de CDC de Parquet com a camada Xet permite deduplicação entre arquivos e repositórios, essencial para colaboração e gerenciamento de dados em escala.

O que há de novo

O recurso Parquet CDC está disponível tanto no PyArrow quanto no Pandas, permitindo escrever Parquet com chunking definido pelo conteúdo ativado. A mudança central é a possibilidade de escrever com use_content_defined_chunking=True, garantindo que as colunas sejam divididas em páginas de dados de acordo com o conteúdo, antes da serialização e compressão. Isso replica a deduplicação do Xet, mas aplicada aos valores lógicos das colunas. Durante as demonstrações, um subconjunto gerenciável do OpenOrca mostrou que as leituras e gravações podem ser realizadas com URIs Hugging Face (hf://) no PyArrow. Quando o mesmo arquivo é carregado novamente ou em outro repositório, a deduplicação pode reconhecer conteúdo idêntico e transferir apenas as partes alteradas, resultando em operações quase instantâneas. Alguns pontos práticos observados:

  • Adição de novas colunas: apenas as novas colunas e o cabeçalho/metadata atualizados são enviados.
  • Remoção de colunas: altera apenas o metadata do rodapé; os dados permanecem no armazenamento.
  • Mudança de tipo de coluna (ex.: int64 para int32): apenas os dados da nova coluna e o metadata são enviados.
  • Aglomeração de novas linhas: apenas as novas linhas são transferidas; heatmaps podem mostrar várias regiões vermelhas devido ao layout por páginas, mas o restante não é retransferido.
  • Parquet com CDC e particionamento entre arquivos: a deduplicação funciona entre arquivos, mantendo o tamanho total do upload próximo do original. Essas observações são demonstradas no post e ilustradas com heatmaps que visualizam o progresso de deduplicação e a transferência de dados.

Por que isso importa (impacto para desenvolvedores/empresas)

Para equipes que trabalham com grandes conjuntos de dados Parquet na Hugging Face, CDC via a camada Xet oferece vantagens reais:

  • Transferência de dados reduzida: deduplicação no nível de conteúdo significa que apenas páginas de dados alteradas e metadados de rodapé são trocados.
  • Custos de armazenamento mais baixos: deduplicação entre repositórios ajuda a evitar armazenar cópias idênticas de dados, especialmente quando datasets evoluem ou são reutilizados.
  • Colaboração mais rápida: deduplicação eficaz entre repositórios acelera fluxos de trabalho que envolvem compartilhamento e recomposição de dados.
  • Benefícios de leitura/gravação: CDC de Parquet com Xet otimiza operações comuns de Parquet no Hub, com escalabilidade para tamanho e complexidade de datasets.
  • Aplicabilidade ampla: a camada Xet é format-agnóstica, enquanto o Parquet CDC foca nas páginas de dados da Parquet para maximizar a deduplicação. Para practitioners, isso se traduz em ciclos de iteração mais rápidos, custos menores com armazenamento em nuvem e pipelines de dados mais responsivos conforme datasets crescem e evoluem. A integração também está alinhada com ecossistemas PyArrow e Pandas, tornando o CDC acessível a engenheiros de dados e cientistas de dados. Hugging Face Blog

Detalhes técnicos ou Implementação

  • Habilitando CDC: use use_content_defined_chunking=True na escrita Parquet (PyArrow). Pandas também suporta a funcionalidade.
  • URLs e acesso: desde o PyArrow 21.0.0, URIs hf:// podem ser usados para ler/escrever Parquet no Hub, facilitando a integração.
  • Chunking a nível de páginas de dados: CDC opera no nível da página de dados (chunk de coluna), chunking por conteúdo antes da serialização/compressão, alinhando-se à deduplicação do Xet.
  • Considerações sobre row-groups: os writers de Parquet usam tamanhos de row-group fixos por padrão (por exemplo, 1 Mi linhas no PyArrow). Writers de datasets podem reduzir o tamanho do row-group para melhorar desempenho de acesso aleatório ou reduzir uso de memória. Alterar o tamanho do row-group pode deslocar linhas entre as páginas de dados, impactando a deduplicação.
  • Deduplicação entre arquivos: Parquet CDC com Xet pode deduplicar dados entre vários arquivos, mesmo com split de dados em diferentes fronteiras.
  • Cenários práticos: adicionar colunas resulta em transferência apenas das novas informações; remover colunas altera apenas o rodapé; alterações de tipo de coluna transferem apenas os dados novos e metadata; adicionar linhas traz apenas as novas linhas. | Cenário | Comportamento de Deduplicação com Parquet CDC + Xet |--- |--- |Novas colunas adicionadas | Apenas novas colunas e metadata do rodapé atualizados são enviados; dados existentes permanecem no armazenamento |Remoção de colunas | Apenas metadata do rodapé muda; as outras colunas permanecem no armazenamento e não são transferidas novamente |Mudança de tipo de coluna (ex.: int64 para int32) | Apenas os dados da nova coluna e o metadata são enviados |Adição de novas linhas | Apenas as novas linhas são transferidas; podem aparecer várias regiões vermelhas devido ao layout por página, mas os dados existentes não são retransferidos |Cobertura entre arquivos / particionamento | Deduplicação funciona entre arquivos; o tamanho total do upload fica próximo do tamanho original |
  • Considerações de download: os benefícios de CDC também se aplicam a downloads via hf_hub_download() e datasets.load_dataset().
  • Limitações: a eficácia da deduplicação depende da distribuição das alterações; alterações que afetam a maior parte das páginas de dados podem reduzir a taxa de deduplicação.

Pontos-chave

  • CDC de Parquet chega ao PyArrow e ao Pandas, funcionando com a camada Xet para deduplicação no nível de página de dados das colunas.
  • Ativar CDC é simples (use_content_defined_chunking=True) e beneficia fluxos de colaboração entre repositórios.
  • A abordagem reduz transferências de dados e custos de armazenamento, melhorando o desempenho de operações Parquet no Hub.
  • A eficácia depende do tipo de alteração; casos comuns de adição/remoção de colunas ou mudanças toleram boa deduplicação; alterações extensas podem reduzir a eficiência.
  • A camada Xet é format-agnóstica; o CDC aplica chunking orientado ao conteúdo para otimizar deduplicação antes da serialização e compressão. Hugging Face Blog

FAQ

  • O que é Parquet CDC?

    CDC é um recurso do Parquet (disponível em PyArrow e no Pandas) que chunking as páginas de dados por conteúdo, permitindo deduplicação no Xet com base nos valores lógicos das colunas.

  • Como habilito o Parquet CDC?

    Em PyArrow, passe use_content_defined_chunking=True para write_parquet; o Pandas também oferece suporte à funcionalidade.

  • CDC afeta downloads também?

    Sim. Os benefícios de deduplicação se aplicam a downloads via hf_hub_download() e datasets.load_dataset().

  • Como o tamanho de row-group influencia o desempenho do CDC?

    Writers usam row-groups fixos (ex.: 1 Mi linhas no PyArrow). Ajustar o tamanho pode ajudar o acesso, mas mudanças no row-group podem deslocar dados entre páginas, impactando a deduplicação de forma similar a edições no conjunto de dados.

  • CDC pode deduplicar dados entre vários arquivos?

    Sim. CDC combinado com Xet deduplica dados entre múltiplos arquivos, mesmo com arquivos divididos, mantendo o tamanho total do upload próximo do original. [Hugging Face Blog](https://huggingface.co/blog/parquet-cdc)

Referências

More news