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.