[英]Apache Flink, key two datastreams with similar field string value but NOT the same
我完全絕望了!
我正在將 apache flink 與 java 一起使用,我想知道是否可以修改 keyby 方法以便通過相似性而不是確切名稱來鍵入?
我有兩個不同的 DataStreams,我正在做一個聯合。 在第一個流中,我想要 KeyBy 的字段名稱是“John Locke”,而在第二個數據流中,字段值是“John L”。
我有一個算法,可以給我一些不同字符串之間的分數。 我的想法是:例如,如果兩個字符串之間的分數高於 0'80,那么這兩個字符串將被視為相同,當我應用 keyby("name") 時,這些相似的字符串將被鍵入,因為它們具有完全相同的同名。
視覺示例:
數據流1-----約翰·洛克、米奇·米克、威爾·威廉姆斯
satastream2----- Mickey M., John L., Anthony Brown
數據流 d3= datastream1.union(datastream2)
d3.keyby 分數/相似之處,而不是確切的名稱。
希望你理解,謝謝!
我認為您的要求將難以有效實施。 原因是以下情況:
如果元素的順序是 A、B、D、C,則必須在事件 C 到達時重新分區。通常,組可以隨着每個元素的到來而改變。
您還可以做的是使用 KeySelector,它執行某種詞干提取、正則化並鍵入 n
只要鍵是確定性的,您就可以使用鍵選擇器,這是一個基本示例,因為名字總是跟在姓氏之后。
鍵選擇器將一個值或一組值轉換為在數據流中標識集合的鍵
將其放在 keyby 函數中或創建一個類
new KeySelector<String, String key>() {
@Override
public Object getKey(String value) throws Exception {
String[] fullnameArr = value.split(" ");
String[] NameChar = fullnameArr[fullnameArr.length-1].split("");
return FullnameArr[0] + NameChar[0];
}
所以所有的名字都會產生 JohnL , TomT , CarlS, TonyI - 確定性鍵
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.