Meine Frage ist über Alternativen/Optimierung zu groupBy()
Betrieb auf RDD. Ich habe Millionen von Message
Instanzen, die basierend auf einer ID gruppiert werden müssen. Ich benutze groupBy()
, um das Ziel zu erreichen, aber ich weiß, dass es teuer ist und es sehr viel Verarbeitungszeit erfordert.Wie optimiert man groupBy() Operation auf Spark RDD
Also habe ich versucht reduceByKey(func)
und combineByKey()
als Alternative, die in einigen der Ressourcen vorgeschlagen wurde, dass ich ging durch, aber es ist nicht eine Anpassung an mein Szenario, in dem Meine Forderung ist die Gruppierung nur. Aber meine Datengröße ist riesig, wo groupBy
verbraucht mehr als 70% meiner Arbeitszeit. So sind alle Vorschläge oder Lösungen geschätzt.
Meine Eingangsdaten
Seq (neue Nachricht ("1", "abc", "Request"), neue Nachricht ("1", "cba", "Response"), neue Nachricht ("2", "def", "Request"), neue Nachricht ("2", "fed", "Response"), neue Nachricht ("3", "ghi", "Request"), neu Message ("3", "IHG", "Response"))
aus Gründen der Einfachheit halber habe ich Eingabedaten in Seq
gegeben
def groupMessages(sourceRdd: RDD[Message]): Unit {
val messageIdRdd = sourceRdd.mapPartitions(partitionData => {
partitionData.map(row => (row.uniqueID(), row))
})
/*
Group messages based on its message id. This functionality is to combine request response
together as single transaction based on message id.
*/
val groupbyRdd = messageIdRdd.groupBy(_._1)
}
Erwartetes Ergebnis
(2, CompactBuffer ((2, Nachricht (2, def, Request)), (2, Message (2, gefüttert, Response)))) (3, CompactBuffer ((3, Nachricht (3, ghi, Anfrage)), (3, Nachricht (3, ihg, Antwort)))) (1, CompactBuffer ((1, Nachricht (1, abc, Anfrage)), (1, Nachricht (1, cba, Antwort))))
was meinst du mit 'group rows'? Bitte illustrieren Sie mit Beispieldaten und erwarteter Ausgabe. – mtoto
@ mtoto danke für deine antwort. Ich habe meinen Beitrag aktualisiert. hoffe, dass die angegebenen Details klar genug sind. – BDR
"Meine Anforderung ist nur Gruppierung". Gruppierung ist von Natur aus eine teure Operation in einem großen Datensatz.Es mag keine Wunderwaffe geben –