Skip to content
Parquet CDC por Contenido con Xet: cargas más rápidas y deduplicación inteligente
Source: huggingface.co

Parquet CDC por Contenido con Xet: cargas más rápidas y deduplicación inteligente

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

TL;DR

  • Parquet Content-Defined Chunking (CDC) ya está disponible en PyArrow y Pandas, lo que permite una deduplicación eficiente en la capa de almacenamiento Xet de Hugging Face.
  • CDC deduplica datos entre repositorios, reduciendo cargas y descargas y los costos de almacenamiento.
  • Active la función pasando use_content_defined_chunking=True al escribir Parquet (PyArrow); también hay soporte en Pandas.
  • Este enfoque chunking de páginas de datos por contenido mejora la eficiencia de las operaciones Parquet en el Hub.
  • La demostración con OpenOrca ilustra reducciones sustanciales de datos transferidos y operaciones más rápidas con CDC.

Contexto y antecedentes

Parquet es un formato de almacenamiento en columnas ampliamente utilizado. Hugging Face aloja casi 21 PB de conjuntos de datos, con archivos Parquet representando más de 4 PB de ese almacenamiento. Para gestionar esta escala, Hugging Face introdujo una nueva capa de almacenamiento llamada Xet, que utiliza chunking definido por el contenido para deduplicar fragmentos de datos. Este enfoque reduce costos de almacenamiento y acelera uploads y downloads, especialmente cuando múltiples flujos de trabajo comparten datos similares o en evolución. CDC de contenido se sitúa junto a las capacidades de deduplicación de Xet. La disposición de Parquet—organizada por columnas y por chunks de columna (páginas de datos) con compresión—puede generar representaciones en bytes distintas para cambios pequeños. CDC aborda esto dividiendo las páginas de datos según su contenido, alineando la deduplicación con los valores lógicos de las columnas. Esto ayuda a Xet a reconocer de forma más eficiente cuándo el contenido es el mismo. El texto también indica que desde PyArrow 21.0.0, se pueden usar URIs de Hugging Face (hf://) directamente en PyArrow para leer y escribir Parquet (y otros formatos) en el Hub, facilitando el acceso programático. La combinación de Parquet CDC y la capa Xet permite deduplicación entre archivos y repos, lo que es crucial para flujos de trabajo colaborativos y gestión de datos a gran escala.

Qué hay de nuevo

El CDC de Parquet está disponible en PyArrow y en Pandas, lo que permite escribir Parquet con chunking definido por el contenido activado. El cambio clave es la capacidad de escribir con use_content_defined_chunking=True, asegurando que las columnas se dividan en páginas de datos de acuerdo con el contenido, antes de la serialización y compresión. Esto refleja la deduplicación de Xet, pero aplicada a los valores lógicos de las columnas. Demos en un subconjunto OpenOrca manejable mostraron que las lecturas y escrituras pueden realizarse con URIs de Hugging Face (hf://) en PyArrow. Cuando se descarga el mismo archivo en el mismo repositorio o en otro, la deduplicación puede reconocer contenido idéntico y transferir solo las partes modificadas, resultando en operaciones casi instantáneas. Observaciones prácticas:

  • Añadir columnas: solo las nuevas columnas y los metadatos del pie de página se transfieren.
  • Eliminar columnas: afecta únicamente a los metadatos del pie de página; los datos existentes permanecen en almacenamiento y no se transfieren de nuevo.
  • Cambiar tipo de columna (p. ej., int64 a int32): solo se transfieren los datos de la nueva columna y los metadatos.
  • Append de nuevas filas: solo se transfieren las nuevas filas; pueden aparecer regiones rojas en los heatmaps debido al diseño por páginas, pero los datos existentes no se reenvían.
  • CDC y partición entre archivos: deduplicación funciona entre archivos, incluso con particiones, con un tamaño total de carga cercano al original. Estos resultados se ilustran en el artículo y con heatmaps que muestran el progreso de la deduplicación y el volumen transferido.

Por qué es importante (impacto para desarrolladores/empresas)

Para equipos que trabajan con grandes conjuntos Parquet en Hugging Face, CDC mediante Xet ofrece ventajas significativas:

  • Transferencia de datos reducida: al deduplicar a nivel de contenido, solo las páginas de datos modificadas y los metadatos se transfieren.
  • Costos de almacenamiento más bajos: la deduplicación entre repos evita almacenar copias idénticas de datos, especialmente cuando los conjuntos evolucionan o se reutilizan.
  • Colaboración más rápida: la deduplicación eficiente entre repositorios acelera flujos de trabajo que implican compartir y recombinar datos.
  • Beneficios de lectura/escritura: CDC de Parquet con Xet optimiza operaciones comunes de Parquet en el Hub, escalando con el tamaño y la complejidad de los conjuntos de datos.
  • Aplicabilidad amplia: Xet es formato-agnóstico; CDC aplica chunking orientado al contenido para optimizar la deduplicación antes de la serialización y compresión. Para practicantes, esto se traduce en ciclos de iteración más cortos, costos de almacenamiento en la nube reducidos y pipelines de datos más reactivos a medida que los datos crecen y evolucionan. La integración es compatible con los ecosistemas PyArrow y Pandas, haciendo CDC accesible a una amplia gama de ingenieros de datos y científicos de datos. Hugging Face Blog

Detalles técnicos o Implementación

  • Activación de CDC: usar use_content_defined_chunking=True en write_parquet; Pandas también lo admite.
  • URIs y acceso: desde PyArrow 21.0.0, se pueden usar hf:// para leer/escribir Parquet en el Hub, simplificando la integración.
  • Chunking a nivel de páginas de datos: CDC chunkea las páginas de datos por contenido antes de la serialización y compresión, alineándose con la deduplicación de Xet.
  • Consideraciones sobre row-groups: los writers de Parquet usan tamaños de row-group fijos por defecto; ajustar el tamaño puede mejorar el rendimiento de acceso aleatorio o reducir el uso de memoria. Cambiar el row-group puede mover filas entre páginas y afectar la deduplicación.
  • Deduplicación entre archivos: CDC + Xet puede deduplicar datos a través de varios archivos, incluso si están divididos en diferentes fronteras. | Escenario | Comportamiento de deduplicación con Parquet CDC + Xet |--- |--- |Nuevas columnas agregadas | Solo las nuevas columnas y los metadatos del pie de página se transfieren; los datos existentes permanecen |Eliminación de columnas | Solo los metadatos del pie de página cambian; las demás columnas permanecen y no se transfieren otra vez |Cambio de tipo de columna (p. ej., int64 → int32) | Solo se transfieren los datos de la nueva columna y los metadatos |Agregar nuevas filas | Solo se transfieren las nuevas filas; pueden aparecer regiones rojas debido al diseño por páginas |Deduplicación entre archivos | Funciona entre archivos, incluso con particionamiento; el tamaño total de la carga queda cercano al original |
  • Consideraciones de descarga: los beneficios de CDC se aplican también a descargas mediante hf_hub_download() y datasets.load_dataset().
  • Limitaciones: la eficacia depende de la distribución de cambios; si la mayoría de las páginas se ven afectadas, la tasa de deduplicación puede disminuir.

Puntos clave

  • CDC Parquet está disponible para PyArrow y Pandas y funciona con la capa Xet para deduplicar a nivel de páginas de datos de las columnas.
  • Activar CDC es sencillo (use_content_defined_chunking=True) y beneficia la colaboración entre repos.
  • El enfoque reduce transferencias y costos de almacenamiento, mejorando el rendimiento de operaciones Parquet en el Hub.
  • La eficacia depende del tipo de cambio; escenarios comunes de columnas y filas muestran deduplicación efectiva, pero cambios extensos pueden reducirla.
  • Xet es agnóstico al formato; CDC aplica chunking orientado al contenido para optimizar la deduplicación antes de la serialización y compresión. Hugging Face Blog

FAQ

  • ¿Qué es Parquet CDC?

    CDC es una característica de Parquet (disponible en PyArrow y Pandas) que segmenta las páginas de datos por contenido, permitiendo deduplicación en Xet basada en los valores lógicos de las columnas.

  • ¿Cómo activo Parquet CDC?

    En PyArrow, pasa use_content_defined_chunking=True a write_parquet; Pandas también lo soporta.

  • ¿CDC afecta también a las descargas?

    Sí. Los beneficios de deduplicación también se aplican a las descargas mediante hf_hub_download() y datasets.load_dataset().

  • ¿Cómo influye el tamaño de row-group en el rendimiento de CDC?

    Los writers de Parquet usan row-groups fijos por defecto; ajustar el tamaño puede mejorar accesos aleatorios o reducir uso de memoria, pero cambiarlo puede desplazar filas entre páginas y afectar la deduplicación.

  • ¿CDC puede deduplicar datos entre varios archivos?

    Sí. CDC Parquet + Xet puede deduplicar datos entre múltiples archivos, incluso cuando están repartidos entre fronteras, con un tamaño total de carga cercano al original. [Hugging Face Blog](https://huggingface.co/blog/parquet-cdc)

Referencias

More news