Parquet Content-Defined Chunking con Xet Storage en Hugging Face Hub
Sources: https://huggingface.co/blog/parquet-cdc, Hugging Face Blog
Visión general
Parquet Content-Defined Chunking (CDC) está disponible para PyArrow y Pandas, permitiendo una deduplicación eficiente de archivos Parquet sobre la capa de almacenamiento Xet de Hugging Face. CDC deduplica datos a nivel de páginas o bloques de contenido definidos, de modo que al subir o descargar Parquet solo se transfieren los datos modificados. Esto puede reducir drásticamente el tráfico y los costos de almacenamiento, especialmente para grandes conjuntos de datos alojados en el Hub. Xet es una capa de almacenamiento diseñada para deduplicar bloques entre repos y archivos. La disposición de Parquet — bloques de columnas y páginas de datos con compresión — puede producir representaciones byte-level diferentes para cambios pequeños. CDC resuelve esto creando bloques basados en el contenido, alineando la deduplicación con los datos lógicos. Para desarrolladores, puedes habilitar CDC pasando use_content_defined_chunking=True a la función write_parquet (PyArrow). Pandas también soporta la característica. Con PyArrow, puedes leer y escribir datos Parquet en Hugging Face Hub a través de las URIs hf:// cuando pyarrow>=21.0.0 está instalado. El Hub recopila estadísticas de almacenamiento y demuestra que los datos subidos pueden ser considerablemente más pequeños cuando se usa CDC. El blog ilustra escenarios como añadir o eliminar columnas, cambiar tipos de columnas y añadir filas. Muestra deduplicación entre repos y entre archivos, así como el impacto de distintos tamaños de row-group. En resumen, Parquet CDC, combinado con Xet, permite flujos de trabajo de datos más eficientes y escalables en el Hub.
Características clave
- El chunking definido por el contenido opera a nivel de páginas de datos Parquet (bloques de columnas) para mejorar la granularidad de la deduplicación.
- Funciona con PyArrow y Pandas, permitiendo CDC en escrituras Parquet.
- Deduplicación entre repos y entre archivos, no solo dentro de un único archivo.
- Integración con la capa de almacenamiento Hugging Face Xet para reducir los bytes transferidos y la huella de almacenamiento.
- Soporte para ediciones comunes de Parquet (agregar/eliminar columnas, cambiar tipos) con menos movimiento de datos.
- Compatibilidad con hf:// URIs, permitiendo lectura/escritura directa al Hub cuando se instala pyarrow>=21.0.0.
- El rendimiento de deduplicación depende de cómo se distribuyen los cambios en los datos y de las restricciones del lector/escritor; el tamaño de row-group puede influir.
- Señala que las descargas también se benefician de CDC al usar las APIs del Hub (hf_hub_download, datasets.load_dataset).
Casos de uso comunes
- Grandes conjuntos Parquet almacenados en Xet donde los datos evolucionan con el tiempo y se quiere evitar reenviar datos no modificados.
- Flujos de trabajo colaborativos entre varios repos, compartiendo columnas o filas actualizadas con transferencias mínimas.
- Escenarios de evolución de esquemas (agregar/eliminar columnas, cambiar tipos) donde solo las partes afectadas se transfieren.
- Pipelines de datos que dependen de la organización por columnas de Parquet y buscan optimizar el almacenamiento y el ancho de banda entre backends estilo nube.
Setup & instalación
Para usar Parquet CDC, necesitarás PyArrow 21.0.0 o superior y el ecosistema Pandas. Instala los paquetes requeridos y luego ejecuta escrituras con CDC.
# Instalar dependencias principales con soporte CDC
pip install "pyarrow>=21.0.0" pandas
# Opcional: instalar herramientas adicionales de Hugging Face para acceder a datasets
pip install huggingface_hub datasets
# Ejemplo PyArrow: escribir una tabla con CDC activado
import pyarrow as pa
import pyarrow.parquet as pq
# tabla simple
tbl = pa.Table.from_pydict({"id": [1, 2, 3], "valor": [100, 200, 300]})
# activar chunking definido por el contenido
pq.write_table(tbl, "hf://mi-repo/data.parquet", use_content_defined_chunking=True)
# Ejemplo Pandas: escribir un DataFrame con CDC activado
import pandas as pd
df = pd.DataFrame({"id": [1, 2, 3], "valor": [100, 200, 300]})
df.to_parquet("hf://mi-repo/data.parquet", use_content_defined_chunking=True)
Nota: CDC requiere pyarrow>=21.0.0 para habilitar I/O hf:// directos al Hub.
Quick start
El flujo mínimo siguiente demuestra escritura con CDC y lectura posterior para ver la deduplicación y el rendimiento del Hub.
import pyarrow as pa
import pyarrow.parquet as pq
# 1) Crear y escribir datos iniciales
tbl1 = pa.Table.from_pydict({"id": [1, 2, 3], "valor": [100, 200, 300]})
pq.write_table(tbl1, "hf://mi-repo/data.parquet", use_content_defined_chunking=True)
# 2) Leer
print(pq.read_table("hf://mi-repo/data.parquet"))
# 3) Modificar datos (p. ej., añadir columna)
tbl2 = tbl1.append_column("extra", pa.array([1, 1, 1]))
pq.write_table(tbl2, "hf://mi-repo/data.parquet", use_content_defined_chunking=True)
# 4) Leer datos actualizados
print(pq.read_table("hf://mi-repo/data.parquet"))
Este flujo muestra cómo CDC permite escribir con menos datos transferidos y leer de vuelta desde el Hub.
Ventajas y desventajas
- Ventajas
- Reducción significativa del tamaño de uploads/downloads para Parquet cuando los cambios son incrementales.
- Deduplicación entre repos y entre archivos, facilitando el intercambio eficiente de datos.
- Funciona con flujos Parquet estándar vía PyArrow y Pandas, con acceso directo al Hub mediante hf://.
- Soporta ediciones de Parquet con menos movimiento de datos.
- Desventajas
- El rendimiento de deduplicación depende de cómo se traducen los cambios en las páginas de Parquet; algunas modificaciones pueden reducir los beneficios.
- El rendimiento óptimo puede requerir ajustar el tamaño de row-group según la carga de trabajo.
- Requiere que los escritores de Parquet soporten CDC.
Alternativas (comparaciones breves)
| Enfoque | Deduplicación entre repos | Soporte CDC | Notas |---|---|---|---| | Parquet sin CDC en Xet | No | No | Transfiere los datos completos en reenvíos. |Parquet CDC con Xet (Hub) | Sí | Sí | Reduce la transferencia de datos; depende de escritores con CDC. |Almacenamiento en la nube tradicional sin Xet | No | No | Transfiere datos más grandes con mayor frecuencia. |
Precio o Licencia
Los detalles de precios y licencias no están especificados en la fuente.
Referencias
More resources
Haz ZeroGPU Spaces más rápido con la compilación ahead-of-time (AoT) de PyTorch
Descubre cómo la compilación AoT de PyTorch acelera ZeroGPU Spaces exportando un modelo compilado y recargándolo al instante, con cuantización FP8, formas dinámicas e integración con Spaces GPU.
Generar imágenes con Claude y Hugging Face: herramientas, instalación y ejemplos
Aprende a conectar Claude a Hugging Face Spaces mediante MCP Server para generar imágenes con Krea y Qwen-Image, aprovechar créditos gratuitos y explorar el directorio de apps de IA.
Nemotron Nano 2 9B: Modelo de razonamiento abierto con 6x de rendimiento para Edge y Empresa
Nemotron Nano 2 9B abierto ofrece precisión líder y hasta 6x de rendimiento gracias a una arquitectura híbrida Transformer–Mamba y un presupuesto de pensamiento configurable.
De cero a GPU: Guía para construir y escalar kernels CUDA listos para producción
Guía práctica para desarrollar, compilar para múltiples arquitecturas y desplegar kernels CUDA con Hugging Face Kernel Builder. Aprende a crear un flujo robusto desde desarrollo local hasta distribución en Hub.
De cero al GPU: Guía para construir y escalar kernels CUDA listos para producción
Una guía práctica sobre kernel-builder de Hugging Face para desarrollar, compilar y desplegar kernels CUDA listos para producción, con builds reproducibles, soporte multi-arquitectura y distribución en Hub.
MCP para la Investigación: Conectar IA a Herramientas de Investigación
Explica el Model Context Protocol (MCP) para la descubrimiento de investigación y cómo la IA puede orquestar herramientas a través del lenguaje natural en arXiv, GitHub y Hugging Face.