Encuentre la fila máxima por grupo en Spark DataFrame
Estoy tratando de usar marcos de datos Spark en lugar de RDD, ya que parecen ser de más alto nivel que los RDD y tienden a producir un código más legible.
En un clúster de 14 nodos de Google Dataproc, tengo alrededor de 6 millones de nombres que son traducidos a ID por dos sistemas diferentes:sa
ysb
. CadaRow
contienename
, id_sa
yid_sb
. Mi objetivo es producir un mapeo deid_sa
aid_sb
tal que para cadaid_sa
, el correspondienteid_sb
es la identificación más frecuente entre todos los nombres adjuntos aid_sa
.
Tratemos de aclarar con un ejemplo. Si tengo las siguientes filas:
[Row(name='n1', id_sa='a1', id_sb='b1'),
Row(name='n2', id_sa='a1', id_sb='b2'),
Row(name='n3', id_sa='a1', id_sb='b2'),
Row(name='n4', id_sa='a2', id_sb='b2')]
Mi objetivo es producir un mapeo dea1
ab2
. De hecho, los nombres asociados aa1
sonn1
, n2
yn3
, que asignan respectivamente ab1
, b2
yb2
, entoncesb2
es el mapeo más frecuente en los nombres asociados aa1
. Del mismo modo,a2
será mapeado ab2
. Está bien suponer que siempre habrá un ganador: no es necesario romper los lazos.
Esperaba poder usargroupBy(df.id_sa)
en mi marco de datos, pero no sé qué hacer a continuación. Esperaba una agregación que pudiera producir, al final, las siguientes filas:
[Row(id_sa=a1, max_id_sb=b2),
Row(id_sa=a2, max_id_sb=b2)]
Pero tal vez estoy tratando de usar la herramienta incorrecta y debería volver a usar RDD.