¿Qué es la deduplicación de datos y por qué es tan importante?

Autor

Kilian Baccaro Salinas

Categoría

PySpark

Tiempo de lectura

02 min de lectura

Fecha de publicación

15 dic, 2025

En el universo de los datos, la presencia de duplicados es casi una garantía. Desde registros de clientes que se repiten hasta transacciones que aparecen más de una vez, los datos duplicados son un problema silencioso que puede socavar la fiabilidad de tus análisis, inflar tus costos y ralentizar tus operaciones. Aquí es donde entra en juego la deduplicación de datos, una práctica esencial en la gestión de cualquier conjunto de datos.

¿Qué es exactamente la deduplicación de datos?

En términos sencillos, la deduplicación de datos es el proceso de identificar y eliminar registros duplicados de un conjunto de datos. El objetivo principal es asegurar la unicidad y la precisión de la información, manteniendo solo una versión “verdadera” o “maestra” de cada entidad o evento.

¿Por qué es tan importante la deduplicación de datos?

1. Mejora la calidad y fiabilidad de los datos

Los datos duplicados sesgan los resultados. Si un cliente aparece cinco veces, tus informes lo contarán cinco veces, dándote una visión inflada y errónea.

2. Optimiza el rendimiento y reduce costos

  • Menor consumo de almacenamiento: Eliminar las copias innecesarias reduce los requisitos de almacenamiento.

  • Procesamiento más rápido: Procesar menos datos significa que tus pipelines, consultas y modelos se ejecutarán de forma más eficiente.

3. Facilita la Gobernanza de Datos

La deduplicación ayuda a mantener la coherencia en todo tu ecosistema de datos.

¿Cómo se realiza la deduplicación de datos?

Utilizaremos unos datos de ejemplo sobre productos:

from datetime import datetime
from pyspark.sql.types import *

data = [
    (1, "Producto1", 9.99, datetime.strptime("2025-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")),
    (2, "Producto2", 25.00, datetime.strptime("2025-02-10 11:30:00", "%Y-%m-%d %H:%M:%S")),
    (1, "Producto1", 9.99, datetime.strptime("2025-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")), # Duplicado exacto
    (3, "Producto3", 42.35, datetime.strptime("2025-05-01 14:00:00", "%Y-%m-%d %H:%M:%S")),
    (2, "Producto2", 25.00, datetime.strptime("2025-03-01 15:32:58", "%Y-%m-%d %H:%M:%S")), # Duplicado con fecha posterior
    (4, "Producto4", 59.99, datetime.strptime("2025-05-27 16:00:00", "%Y-%m-%d %H:%M:%S")),
    (1, "Producto1", 12.99, datetime.strptime("2025-03-21 09:00:00", "%Y-%m-%d %H:%M:%S")), # Con fecha más reciente
    (5, "Producto2", 25.00, datetime.strptime("2025-03-01 15:32:58", "%Y-%m-%d %H:%M:%S")) # ID diferente pero mismos datos clave
]

schema = StructType([
    StructField('id', IntegerType(), True),
    StructField('product_name', StringType(), True),
    StructField('price', DoubleType(), True),
    StructField('last_updated', TimestampType(), True)
])

df = spark.createDataFrame(data, schema=schema)

Deduplicación exacta

Filas completamente idénticas en todas sus columnas o en un subconjunto específico:

# Deduplicación basada en todas las columnas
df_deduplicated_all = df.dropDuplicates()

Solo elimina los duplicados idénticos en todas las columnas. Si especificamos la clave primaria:

df_deduplicated_subset = df.dropDuplicates(subset=["id"])

Elimina duplicados por id, pero se queda con el primer valor encontrado, que puede no ser el más reciente.

Deduplicación por Prioridad/Versión

La forma más robusta. Usa funciones de ventana para seleccionar el registro más reciente:

from pyspark.sql.functions import col, row_number
from pyspark.sql.window import Window

window_spec_pk = Window.partitionBy("id").orderBy(col("last_updated").desc())

df_ranked_pk = df.withColumn("row_num", row_number().over(window_spec_pk))
df_deduplicated_pk_priority = df_ranked_pk.filter(col("row_num") == 1).drop("row_num")

print("DataFrame Deduplicado por Clave Primaria (id) - Prioridad (más reciente):")
df_deduplicated_pk_priority.show()

Ejemplo con SparkSQL

df.createOrReplaceTempView("productos")

df = spark.sql("""
WITH dedupes AS
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY last_updated DESC) AS row_num
    FROM productos
)
SELECT
    id,
    product_name,
    price,
    last_updated
FROM dedupes
WHERE row_num = 1
""")

df.show()

Conclusión

La deduplicación es una práctica esencial en el procesamiento de datos, y PySpark en Microsoft Fabric ofrece las herramientas robustas para realizarla de manera eficiente. Este proceso mejora la calidad de los datos, optimiza el rendimiento de las consultas y análisis, y reduce los costos de almacenamiento.