Ich versuche eine optimierte Möglichkeit zu finden, eine Liste von einzigartigen Co-Location-Paarungen zu generieren. Ich habe versucht, dies mit einer Reihe von Flatmaps und verschiedenen Abfragen zu tun, aber ich habe festgestellt, dass die Flatmap beim Ausführen von Millionen von Datensätzen nicht übermäßig performant ist. Jede Hilfe bei der Optimierung wäre dankbar.Spark Aufgabenoptimierung
Der Datensatz ist (Geohash, ID) und ich bin dies auf 30 Node Cluster ausgeführt.
val rdd = sc.parallelize(Seq(("gh5", "id1"), ("gh4", "id1"), ("gh5", "id2"),("gh5", "id3"))
val uniquePairings = rdd.groupByKey().map(value =>
value._2.toList.sorted.combinations(2).map{
case Seq(x, y) => (x, y)}.filter(id =>
id._1 != id._2)).flatMap(x => x).distinct()
voutput = Array(("id1","id2"),("id1","id3"),("id2","id3"))
Danke für die Antwort, die Datenrahmen bieten irgendwelche Leistungsvorteile des Joins in Bezug auf das Shuffling. – SChorlton
Nicht eine, die ich kenne, aber es ist effizienter als Standard-Co-Gruppe 'Join' auf RDDs. – zero323
Danke Ich habe eine leicht veränderte Version ausgeführt, um die Schlüssel zuerst zu sortieren, so dass die Suche eher lokal stattfinden sollte. Ich nehme an, Spark wird zunächst lokal aussehen? – SChorlton