Saltar al contenido

Eliminación de duplicados de filas en función de columnas específicas en un RDD/Spark DataFrame

Es fundamental entender el código correctamente antes de usarlo a tu proyecto y si tquieres aportar algo puedes dejarlo en los comentarios.

Solución:

Pyspark lo hace Incluir un dropDuplicates() método, que se introdujo en 1.4. https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.dropDuplicates

>>> from pyspark.sql import Row
>>> df = sc.parallelize([ 
...     Row(name='Alice', age=5, height=80), 
...     Row(name='Alice', age=5, height=80), 
...     Row(name='Alice', age=10, height=80)]).toDF()
>>> df.dropDuplicates().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
| 10|    80|Alice|
+---+------+-----+

>>> df.dropDuplicates(['name', 'height']).show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
+---+------+-----+

De su pregunta, no está claro qué columnas desea usar para determinar los duplicados. La idea general detrás de la solución es crear un key basado en los valores de las columnas que identifican duplicados. Luego, puede usar las operaciones reduceByKey o reduce para eliminar los duplicados.

Aquí hay un código para que comiences:

def get_key(x):
    return "012".format(x[0],x[2],x[3])

m = data.map(lambda x: (get_key(x),x))

Ahora, tienes un key-valor RDD que está codificado por las columnas 1, 3 y 4. El siguiente paso sería un reduceByKey o groupByKey y filter. Esto eliminaría los duplicados.

r = m.reduceByKey(lambda x,y: (x))

Sé que ya aceptaste la otra respuesta, pero si quieres hacer esto como un DataFrame, solo usa groupBy y agg. Suponiendo que ya haya creado un DF (con columnas denominadas “col1”, “col2”, etc.), podría hacer:

myDF.groupBy($"col1", $"col3", $"col4").agg($"col1", max($"col2"), $"col3", $"col4")

Tenga en cuenta que en este caso, elegí el Max de col2, pero podría hacer avg, min, etc.

Sección de Reseñas y Valoraciones

Si estás de acuerdo, puedes dejar un enunciado acerca de qué te ha gustado de esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *