Cómo eliminar duplicados en PySpark: paso a paso
Eliminar duplicados en PySpark es una de las tareas de limpieza de datos más comunes: las filas repetidas inflan los recuentos, distorsionan las medias y provocan errores en tus informes. En esta guía aprenderás, paso a paso, a eliminar filas duplicadas con los métodos dropDuplicates y distinct, ya sea en todas las columnas o solo en las que definen tu clave.
Requisitos previos
- Python 3 y la biblioteca
pysparkinstalada (pip install pyspark). - Una
SparkSessionactiva (mostramos cómo crear una a continuación). - Conocimientos básicos de Python y de DataFrames.
Paso 1: Crear una SparkSession y datos de ejemplo
Empieza iniciando Spark y creando un DataFrame pequeño con filas repetidas a propósito. Así podrás ver el efecto de cada método antes de aplicarlo a tus datos reales.

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("remover-duplicados").getOrCreate()
dados = [
(1, "Ana", "Lisboa"),
(2, "Bruno", "Porto"),
(2, "Bruno", "Porto"),
(3, "Carla", "Braga"),
(3, "Carla", "Faro"),
]
colunas = ["id", "nome", "cidade"]
df = spark.createDataFrame(dados, colunas)
df.show()
Fíjate en que la fila de Bruno aparece dos veces exactamente igual, mientras que el id 3 (Carla) aparece con dos ciudades diferentes. Son dos tipos de "duplicado" distintos, y cada uno pide su propio tratamiento.
Paso 2: Eliminar duplicados en todas las columnas
Para eliminar filas totalmente iguales, llama a dropDuplicates sin argumentos. Compara todas las columnas y conserva solo una copia de cada fila repetida.
sem_duplicados = df.dropDuplicates()
sem_duplicados.show()
La fila duplicada de Bruno pasa a aparecer una sola vez. El método df.distinct() hace exactamente lo mismo y es solo una forma alternativa de escribirlo. Como Spark tiene que comparar filas entre particiones, esta operación implica un shuffle; en tablas grandes conviene desduplicar lo antes posible en el pipeline.
Paso 3: Eliminar duplicados por columnas específicas
A menudo quieres "un registro por cliente" o "uno por id", aunque las demás columnas varíen. Pasa la lista de columnas clave a dropDuplicates.
sem_duplicados_id = df.dropDuplicates(["id"])
sem_duplicados_id.show()
Ahora obtienes una sola fila por id. Cuidado con un detalle importante: cuando las otras columnas tienen valores diferentes (el id 3 tenía "Braga" y "Faro"), Spark no garantiza qué fila conserva. El resultado puede cambiar entre ejecuciones.
Error común: suponer que dropDuplicates(["id"]) devuelve siempre la misma fila. No lo hace: si necesitas un resultado estable, pasa al Paso 4.
Paso 4: Elegir qué duplicado conservar
Cuando la fila que conservas importa (por ejemplo, quedarte con la ciudad en orden alfabético, o con el registro más reciente), usa una window function para ordenar dentro de cada clave y quedarte con la primera.
from pyspark.sql import Window
from pyspark.sql.functions import row_number, col
janela = Window.partitionBy("id").orderBy(col("cidade").asc())
df_numerado = df.withColumn("linha", row_number().over(janela))
resultado = df_numerado.filter(col("linha") == 1).drop("linha")
resultado.show()
Aquí, para cada id, nos quedamos con la ciudad que va primero por orden alfabético. Solo tienes que cambiar el orderBy (por ejemplo, a una fecha con .desc()) para quedarte con el registro más reciente.
Comprobar el resultado
La forma más sencilla de confirmarlo es comparar el número de filas antes y después. Si eliminaste duplicados, el segundo valor debe ser menor.
print("Antes:", df.count())
print("Depois:", sem_duplicados.count())
En nuestro ejemplo, pasamos de 5 a 4 filas al eliminar la repetición de Bruno. Confirma también visualmente con .show() que ya no hay filas iguales.
Conclusión
Ya sabes eliminar duplicados en PySpark de tres formas: en todas las columnas con dropDuplicates(), por una clave con dropDuplicates(["id"]) y de forma controlada con una window function. El siguiente paso natural es tratar los valores nulos (df.na.drop() o df.na.fill()) y luego guardar los datos limpios en Parquet. Un último consejo: antes de desduplicar, comprueba siempre cuántas filas repetidas tienes y por qué — un duplicado a menudo esconde un problema en el proceso que lo generó. ¿Qué columnas definen una fila "única" en tu conjunto de datos?