我有一個csv文件,名稱接近845k行。迭代比較HashMap元素的優化
我想比較模糊名稱字符串匹配。 我用Java fuzzy string matching實現了衆所周知的Python的fuzzywuzzy算法。
在代碼下面實現它對我來說非常完美。 問題是過程時間到很多。 每行比較時間與其他行近15秒。 這是一小時240行,整個過程將近6000行。 而且所有的過程都將在幾個月內完成。 這是不可接受的工作時間。
我需要一種優化技術或方法。 我需要一些建議而不是解決方案。
您對以下代碼的建議是?
BufferedReader br = new BufferedReader(new FileReader("data/names.csv"));
BufferedWriter bw = new BufferedWriter(new FileWriter("data/similars.csv"));
ConcurrentHashMap<Integer,String> map = new ConcurrentHashMap<Integer,String>();
String lines;
while((lines = br.readLine()) != null){
String[] line = lines.split("\\t",-1);
Integer nameId = Integer.parseInt(line[0]);
String name = line[1];
map.put(nameId, name);
}
for (Map.Entry<Integer, String> entry1 : map.entrySet()) {
Integer nameId1 = entry1.getKey();
String name1 = entry1.getValue();
for (Map.Entry<Integer, String> entry2 : map.entrySet()) {
Integer nameId2 = entry2.getKey();
if (nameId1 == nameId2) {
continue;
}
String name2 = entry2.getValue();
int ratio = FuzzySearch.ratio(name1,name2);
if(ratio > 95){
bw.write(nameId1 + "," + nameId2 + "\n");
}
}
// For to prevent matching same pairs again
map.remove(nameId1);
}
如何在AWS中的幾個CPU或幾臺服務器上運行此操作?如果我是對的,24個核心應該需要3天:((845000 * 15/2)/ 60/60/24)/ 24〜3.05天。我認爲這是可以接受的,因爲你應該這樣做一次。 –
@MaximDobryakovİt是我的臺式電腦與I7的CPU和16 GB的RAM.win 10操作系統。 – Yilmazerhakan