2016-06-02 11 views
1

Ich habe eine einzige Dimension DataSet vom Typ String:Apache Flink DataSet API: Wie füge ich ein Flink DataSet mit sich selbst zu einem neuen zusammen?

DataSet<String> x = //['dog','cat','sheep'] 

Ich möchte alle Strings mit den anderen diesem Datensatz vergleichen verschiedene String-Ähnlichkeitsalgorithmen zu analysieren. Deshalb brauche ich eine resultierende Datensatz mit der folgenden Struktur:

DataSet<Tuple2<String,String>> y = //[{'dog','cat'},{'dog','sheep'},{'cat','sheep'}] 

Auf diesem Datensatz eine flatMap Funktion (oder ähnlich) angewandt werden, kann die Strings zu vergleichen.

Mein Problem ist, dass ich nicht weiß, welche Transformation ich verwenden muss. Vielleicht ist eine Transformation nicht der richtige Weg, damit umzugehen.

Im Klar Java I einfache Verwendung zwei Schleifen wie folgt aus:

for(int i = 0; i < x.length() ; i++){ 
    for(int j = i+1 ; i< x.length(); j++){ 
     //do something with x[i] and x[j] 
    } 
} 

Antwort

1

x.cross (x) sollte es tun. Dies wird ein Standard-Kreuz ausführen.

+0

Danke für Hilfe! Die Kreuztransformation funktioniert. In meinem Fall benutze ich 1. x.cross (x) und 2. eine Filtertransformation, um alle nicht benötigten Tupel auszufiltern, um eine strenge obere Dreiecksmatrix zu bilden (A = a [i] [j] und a [i] [ j] für i> = j) .... Wenn es einen performanteren Weg gibt, lass es mich wissen. –