Volver a la página principal
lunes 18 noviembre 2024
12

Cómo usar la compresión de datos en Parquet

El formato Apache Parquet es un formato de almacenamiento en columnas altamente eficiente y optimizado para grandes volúmenes de datos. Una de sus características clave es el Data Compression, que reduce significativamente el tamaño de los datos almacenados, mejorando el rendimiento en lectura y escritura.

¿Qué es la compresión en Parquet?

La compresión en Parquet permite reducir el tamaño de los datos en disco al aplicar algoritmos de compresión a los bloques y páginas del archivo. Debido a que Parquet almacena datos en un formato columnar, la compresión es más efectiva porque las columnas tienden a contener valores similares, lo que mejora la eficiencia de los algoritmos.

Ventajas de la compresión en Parquet

1. Ahorro de espacio en disco: Reduce el tamaño de los archivos almacenados.

2. Mejora del rendimiento: Al reducir la cantidad de datos transferidos desde el disco, mejora la velocidad de lectura.

3. Eficiencia en consultas: Parquet permite descomprimir solo las columnas necesarias para una consulta.

Algoritmos de compresión en Parquet

Parquet soporta varios algoritmos de compresión. Aquí una comparación:

Algoritmo Descripción Compresión Velocidad de compresión Velocidad de descompresión
SNAPPY Rápido y eficiente, ideal para análisis. Moderada Alta Alta
GZIP Alta tasa de compresión. Alta Baja Moderada
LZO Similar a SNAPPY, pero menos popular. Moderada Alta Alta
ZSTD Alta compresión y velocidad equilibrada. Alta Alta Alta
NONE Sin compresión. N/A N/A N/A

Configuración de la compresión en Parquet

La configuración de la compresión depende de la herramienta o framework que utilices para crear o leer archivos Parquet.

1. Usando PySpark

PySpark permite especificar el algoritmo de compresión al guardar archivos Parquet:

from pyspark.sql import SparkSession

# Crear una sesión de Spark
spark = SparkSession.builder.appName("Parquet Compression Example").getOrCreate()

# Crear un DataFrame de ejemplo
data = [("Alice", 34), ("Bob", 45), ("Charlie", 29)]
df = spark.createDataFrame(data, ["Name", "Age"])

# Guardar el DataFrame en formato Parquet con compresión SNAPPY
df.write.parquet("output_snappy", compression="snappy")

# Guardar con compresión GZIP
df.write.parquet("output_gzip", compression="gzip")

2. Usando pandas

En pandas, puedes exportar datos al formato Parquet con compresión especificada:

import pandas as pd

# Crear un DataFrame de ejemplo
data = {"Name": ["Alice", "Bob", "Charlie"], "Age": [34, 45, 29]}
df = pd.DataFrame(data)

# Guardar en Parquet con compresión GZIP
df.to_parquet("output.parquet", compression="gzip")

3. Usando Apache Hive

En Apache Hive, puedes configurar la compresión al escribir tablas Parquet:

SET hive.exec.compress.output=true;
SET parquet.compression=SNAPPY;

CREATE TABLE ejemplo_parquet (id INT, nombre STRING)
STORED AS PARQUET;
INSERT OVERWRITE TABLE ejemplo_parquet SELECT * FROM otra_tabla;

4. Usando Apache Drill

Apache Drill permite definir el algoritmo de compresión al escribir datos en Parquet:

ALTER SESSION SET `store.parquet.compression` = 'snappy';

CREATE TABLE dfs.tmp.ejemplo_parquet AS
SELECT * FROM `dfs.tmp.otra_tabla`;

Comparación de tamaños de archivo con diferentes algoritmos

Supongamos un dataset con 1 millón de filas. Aquí un ejemplo de los tamaños obtenidos con distintos algoritmos:

Algoritmo Tamaño del archivo Tiempo de escritura Tiempo de lectura
SNAPPY 100 MB 2 segundos 1.5 segundos
GZIP 50 MB 4 segundos 2 segundos
ZSTD 60 MB 3 segundos 1.5 segundos
NONE 200 MB 1 segundo 1 segundo

Elegir el algoritmo adecuado

  • Usa SNAPPY si priorizas la velocidad sobre la tasa de compresión (ideal para análisis en tiempo real).
  • Usa GZIP si necesitas maximizar la reducción de espacio en disco.
  • Usa ZSTD si buscas un equilibrio entre alta compresión y buena velocidad.
  • Usa NONE solo si no te preocupa el tamaño en disco o el rendimiento de red.

Verificar la compresión de un archivo Parquet

Para inspeccionar la compresión utilizada en un archivo Parquet, puedes usar herramientas como parquet-tools:

1. Instalar parquet-tools:

brew install parquet-tools  # Para macOS

2. Inspeccionar el archivo:

parquet-tools meta output.parquet

En la salida, busca la propiedad compression.

Conclusión

La compresión en Parquet es una característica clave para trabajar con grandes volúmenes de datos. Elegir el algoritmo correcto depende del caso de uso y de las prioridades de rendimiento y almacenamiento. Al configurarla adecuadamente, puedes optimizar tanto el costo como la eficiencia de tu sistema de datos.

Referencias oficiales

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer