2016-06-08 5 views
0

Ich bin total verzweifelt!Apache Flink, Schlüssel zwei Datenströme mit ähnlichen Feld Zeichenfolge Wert, aber nicht das gleiche

Ich benutze Apache flink mit Java und ich würde gerne wissen, ob es möglich ist, die keyby-Methode zu ändern, um nach Ähnlichkeiten und nicht nach dem genauen Namen zu Schlüsseln?

Ich habe zwei verschiedene DataStreams und ich mache eine Union. In dem ersten Stream ist der Name des Felds, das KeyBy sein soll, "John Locke", während der Feldwert in dem zweiten Datastream "John L" ist.

Ich habe einen Algorithmus, der mir eine Punktzahl zwischen einigen verschiedenen Saiten gibt. Meine Idee ist: Wenn die Punktzahl zwischen beiden Strings höher als zB 0'80 ist, dann werden diese beiden Strings als gleich betrachtet und wenn ich den keyby ("name") anwende, werden diese ähnlichen Strings getastet, da sie exakt haben gleicher Name.

Visuelle Beispiel:

datastream1 ----- John Locke, Mickey Micke, Will Williams

satastream2 ----- Mickey M., John L., Anthony Brown

Datastream d3 = datastream1.union (datastream2)

d3.keydurch die Partitur/das Similairy, nicht der genaue Name.

Ich hoffe, Sie verstehen, danke!

+0

Dies wird nicht unterstützt. Vielleicht können Sie eine benutzerdefinierte Lösung dafür erstellen, aber ich bin mir nicht sicher, wie ... Nachdem Sie die Union und keyBy getan haben, was wäre der nächste Schritt, um Ihre Datensätze zu verarbeiten? –

+0

Ja, danach möchte ich die Datensätze bearbeiten. Es war nur ein Beispiel –

+0

Sicher. Aber was möchten Sie konkret tun? –

Antwort

0

Ich denke, Ihre Anforderung wird schwer effizient zu implementieren sein. Die Gründe dafür ist die folgende Situation:

  • sim (A, B) = 0,9
  • sim (A, D) = sim (B, D) = 0,7
  • sim (A, C) = 0,9
  • sim (C, D) 0,9

= Wenn die Reihenfolge der Elemente A, B, D, C, Sie auf die Ankunft der Veranstaltung C. In der Regel neu zu partitionieren, können die Gruppen ändern mit jedem Element, das ankommt.

Was könnten Sie tun, ist alternativ eine keySelector zu verwenden, die eine Art ergeben, Regularisierung tut und auf der n einzugeben

+0

Andere Leute empfehlen mir auch, KeySelector zu benutzen, aber ich wirklich verstehe, wie es funktioniert, wenn ich auf den Führer schaue. –