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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta