2016-08-02 34 views
2

Ich habe zwei JavaPairRDDs.Wie zwei JavaPairRDDs mit benutzerdefinierter Logik zu kombinieren

JavaPairRDD<List<String>, CustomObject> originalData = ...; 
JavaPairRDD<String, CustomField> newData = ...; 

In diesem Fall ist CustomField ein Feld in CustomObject. Mein Ziel ist es, die beiden Datensätze unter der Bedingung zu kombinieren, dass der Schlüssel von newData im Schlüssel von originalData steht. Also, wenn ich etwas wie

originalData = ({ "foo1", "foo2", "foo3"}, customObject1)

newData = ("foo1", CustomField1)

Ich möchte um diese beiden Elemente zu vergleichen und customField1 in customObject1 einzufügen. Ich habe mir Cogroup und FullOuterJoin angesehen, aber diese Funktionen stimmen mit dem Schlüssel überein, was in diesem Fall nicht funktionieren würde, da die Schlüssel offensichtlich verschieden sind. Wie können diese beiden Datensätze am besten kombiniert werden?

Antwort

1

Brauchen Sie eine originelle Form? Wenn nicht kartesisch verwenden:

originalData.cartesian(newData).filter(checkConditon); 

können Sie es auch flach machen:

JavaPairRDD<String, CustomObject> flatData = originalData.flatMap(flatteningFunc); 
flatData.join(newData); 
+0

Ich denke, dass die zweite Option viel schneller –