Maximale Zeile pro Gruppe in Spark DataFrame finden

Ich versuche, Spark-Datenrahmen anstelle von RDDs zu verwenden, da diese offenbar übergeordneter sind als RDDs und tendenziell besser lesbaren Code erzeugen.

In einem Google Dataproc-Cluster mit 14 Knoten habe ich ungefähr 6 Millionen Namen, die von zwei verschiedenen Systemen in IDs übersetzt werden:sa undsb. JederRow enthältname, id_sa undid_sb. Mein Ziel ist es, ein Mapping von @ zu erstellid_sa zuid_sb so dass für jedesid_sa, die entsprechendeid_sb ist die häufigste ID unter allen an @ angehängten Namid_sa.

Versuchen wir es mit einem Beispiel zu verdeutlichen. Wenn ich folgende Zeilen habe:

[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')]

Mein Ziel ist es, ein Mapping von @ zu erstella1 zub2. In der Tat sind die Namen mit @ verbunda1 sindn1, n2 undn3, die jeweils auf @ abbildb1, b2 undb2, sob2 ist die häufigste Zuordnung in den mit @ verknüpften Namea1. Auf die gleiche Weise,a2 wird @ zugeordnb2. Es ist in Ordnung anzunehmen, dass es immer einen Gewinner geben wird: Keine Notwendigkeit, die Verbindung zu trennen.

Ich hatte gehofft, dass ich @ verwenden könngroupBy(df.id_sa) auf meinem Datenframe, aber ich weiß nicht, was ich als nächstes tun soll. Ich habe auf eine Aggregation gehofft, die am Ende die folgenden Zeilen ergeben könnte:

[Row(id_sa=a1, max_id_sb=b2),
 Row(id_sa=a2, max_id_sb=b2)]

Aber vielleicht versuche ich, das falsche Tool zu verwenden, und ich sollte einfach wieder RDDs verwenden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage