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.