Skip to content
Parquet Content-Defined Chunking avec Xet Storage sur Hugging Face Hub
Source: huggingface.co

Parquet Content-Defined Chunking avec Xet Storage sur Hugging Face Hub

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

Aperçu

Le Parquet Content-Defined Chunking (CDC) est désormais disponible pour PyArrow et Pandas, permettant une déduplication efficace des fichiers Parquet sur la couche de stockage Xet de Hugging Face. Le CDC déduplique les données au niveau des pages ou blocs de contenu définis, de sorte que lorsque vous téléchargez ou téléversez des données Parquet, seuls les éléments modifiés sont transférés. Cela peut réduire considérablement le trafic et les coûts de stockage, en particulier pour les grands jeux de données stockés sur le Hub. Xet est une couche de stockage conçue pour dédupliquer des blocs entre les dépôts et les fichiers. La disposition Parquet — blocs de colonnes et pages de données avec compression — peut produire des représentations binaire différentes pour de petits changements. Le CDC traite cela en découpant les données en fonction du contenu, alignant le processus de déduplication sur les données logiques. Pour les développeurs, vous pouvez activer le CDC en passant use_content_defined_chunking=True à la fonction write_parquet (PyArrow). Pandas prend également en charge cette fonctionnalité. Avec PyArrow, vous pouvez lire et écrire des données Parquet sur Hugging Face Hub via les URI hf:// lorsque pyarrow>=21.0.0 est installé. Le Hub collecte des statistiques de stockage et montre que les données envoyées peuvent être nettement plus petites lorsque le CDC est activé. Le blog illustre des scénarios tels que l’ajout ou la suppression de colonnes, le changement de types de colonnes et l’ajout de lignes. Il montre la déduplication entre dépôts et entre fichiers, ainsi que l’impact de différentes tailles de row-group. En résumé, Parquet CDC, associé au Xet, permet des flux de travail de données plus efficaces et évolutifs sur le Hub.

Caractéristiques clés

  • Le découpage défini par le contenu agit au niveau des pages de données Parquet (blocs de colonnes) pour améliorer la granularité de la déduplication.
  • Fonctionne avec PyArrow et Pandas, permettant le CDC dans les écritures Parquet.
  • Déduplication à travers les dépôts et les fichiers, pas seulement à l’intérieur d’un seul fichier.
  • Intégration avec la couche de stockage Hugging Face Xet pour réduire les octets transférés et l’empreinte de stockage.
  • Support des éditions courantes de Parquet (ajout/suppression de colonnes, changement de type) avec moins de mouvement de données.
  • Compatibilité avec les URI hf://, permettant une lecture/écriture directe sur le Hub lorsque pyarrow>=21.0.0 est installé.
  • Les performances de déduplication dépendent des changements dans les données et des contraintes de lecture/écriture; la taille des row-group peut influencer les résultats.
  • À noter que les téléchargements bénéficient également du CDC lors de l’utilisation des API du Hub (hf_hub_download, datasets.load_dataset).

Cas d’utilisation courants

  • Grands ensembles Parquet stockés sur Xet où les données évoluent au fil du temps et où vous voulez éviter de renvoyer des données inchangées.
  • Flux de travail collaboratifs entre plusieurs dépôts, partageant des colonnes ou des lignes mises à jour avec un transfert minimal.
  • Scénarios d’évolution de schéma (ajout/suppression de colonnes, changement de types) où seules les parties affectées sont transférées.
  • Pipelines de données qui dépendent de la disposition en colonnes de Parquet et qui souhaitent optimiser le stockage et la bande passante entre des backends similaires au cloud.

Setup & installation

Pour utiliser CDC Parquet, vous aurez besoin de PyArrow 21.0.0 ou supérieur et de l’écosystème Pandas. Installez les paquets requis puis exécutez les écritures activées CDC.

# Installer les dépendances principales avec le support CDC
pip install "pyarrow>=21.0.0" pandas
# Optionnel : installer des outils supplémentaires Hugging Face pour accéder aux datasets
pip install huggingface_hub datasets
# Exemple PyArrow: écrire une table avec CDC activé
import pyarrow as pa
import pyarrow.parquet as pq
# table simple
tbl = pa.Table.from_pydict({"id": [1, 2, 3], "valeur": [100, 200, 300]})
# activer le chunking défini par le contenu
pq.write_table(tbl, "hf://mon-repo/data.parquet", use_content_defined_chunking=True)
# Exemple Pandas: écrire un DataFrame avec CDC activé
import pandas as pd
df = pd.DataFrame({"id": [1, 2, 3], "valeur": [100, 200, 300]})
df.to_parquet("hf://mon-repo/data.parquet", use_content_defined_chunking=True)

Remarque: CDC nécessite pyarrow>=21.0.0 pour activer les I/O hf:// Directs vers le Hub.

Quick start

Le flux minimal suivant illustre l’écriture avec CDC, puis la lecture, démontrant comment le Hub peut dédupliquer les données et offrir une E/S rapide.

import pyarrow as pa
import pyarrow.parquet as pq
# 1) Créer et écrire les données initiales
tbl1 = pa.Table.from_pydict({"id": [1, 2, 3], "valeur": [100, 200, 300]})
pq.write_table(tbl1, "hf://mon-repo/data.parquet", use_content_defined_chunking=True)
# 2) Lire
print(pq.read_table("hf://mon-repo/data.parquet"))
# 3) Modifier les données (par ex. ajouter une colonne)
tbl2 = tbl1.append_column("extra", pa.array([1, 1, 1]))
pq.write_table(tbl2, "hf://mon-repo/data.parquet", use_content_defined_chunking=True)
# 4) Lire les données mises à jour
print(pq.read_table("hf://mon-repo/data.parquet"))

Cet exemple montre l’écriture avec CDC puis la lecture pour vérifier le dédoublonnage et les performances du Hub. CDC permet de transférer uniquement les pages de données nouvelles ou modifiées lorsque c’est possible.

Avantages et inconvénients

  • Avantages
  • Réduction significative de la taille des uploads/téléchargements pour les jeux de données Parquet qui évoluent par incréments.
  • Déduplication à travers les dépôts et les fichiers, facilitant le partage efficace des données.
  • Fonctionne avec les flux Parquet standards via PyArrow et Pandas, et avec I/O direct au Hub via hf://.
  • Supporte les éditions de Parquet avec moins de mouvement de données.
  • Inconvénients
  • Le rendement de la déduplication dépend de la manière dont les changements se manifestent sur les pages Parquet; certaines modifications peuvent réduire les gains.
  • Les résultats optimisés peuvent nécessiter d’ajuster la taille des row-groups selon la charge.
  • Requiert des writers Parquet supportant CDC.

Alternatives (comparaisons)

| Approche | Déduplication entre dépôts | Support CDC | Remarques |---|---|---|---| | Parquet sans CDC sur Xet | Non | Non | Transfère les données inchangées entierement lors des réimportations. |CDC Parquet avec Xet (Hub) | Oui | Oui | Réduit les transferts; dépend des writers avec CDC. |Stockage cloud traditionnel sans Xet | Non | Non | Transferts de données plus lourds. |

Prix ou Licence

Les détails de tarification et de licence ne sont pas spécifiés dans la source.

Références

https://huggingface.co/blog/parquet-cdc

More resources