Kreuzprodukt in MapReduce

9

Ich möchte die kostspielige Operation des Cross-Produkts über zwei Datensätze in Hadoop mit Java MapReduce durchführen.

Zum Beispiel habe ich Datensätze aus Datensatz A und Datensatz B. Ich möchte, dass jeder Datensatz in Datensatz A mit jedem Datensatz in Datensatz B in der Ausgabe abgeglichen wird. Mir ist klar, dass die Ausgabegröße von |A| * |B| wäre, aber ich möchte es sowieso tun.

Ich sehe, dass Pig CROSS hat, aber mir ist nicht bewusst, wie es ist auf hohem Niveau implementiert. Vielleicht werde ich einen Blick auf den Quellcode werfen.

Ich suche keinen Code, möchte nur auf hoher Ebene wissen, wie ich dieses Problem angehen sollte.

    
Donald Miner 28.04.2012, 17:41
quelle

1 Antwort

3

Ich habe etwas Ähnliches getan, als ich die Dokumentähnlichkeit (Vergleich eines Dokuments mit jedem anderen Dokument) ansah und endete mit einem benutzerdefinierten Eingabeformat, das die beiden Datensätze aufteilte und dann sicherstellte, dass es für jede Teilmenge der Daten eine Aufteilung gab .

So würden Ihre Splits aussehen (jeder führt zwei Sätze von 10 Datensätzen zusammen und gibt 100 Datensätze aus)

%Vor%

Ich erinnere mich nicht daran, wie leistungsfähig es war, aber ich hatte ein Dokument in der Größenordnung von Tausenden, um es miteinander zu vergleichen (auf einem 8-Knoten-Entwicklungscluster), mit Millionen von Kreuzprodukten berechnet.

Ich könnte auch Verbesserungen am Algorithmus vornehmen, da einige Dokumente nie gut gegen andere punkten würden (wenn sie beispielsweise zu viel zeitliche Zeit dazwischen hätten) und dadurch bessere Splits erzeugen würden.

    
Chris White 28.04.2012, 19:52
quelle

Tags und Links