Leo*_*anz 5 java unique bigdata
我有一台4 GB内存的PC和一个内存使用量为10 GB的文件.现在我想检查一下,如果文件中的每一行都是唯一的,那么我编写了以下代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Cleaner {
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("Too less parameters!");
return;
}
File file = new File(args[0]);
BufferedReader buff = new BufferedReader(new FileReader(file));
String line;
Set<String> set = new HashSet<String>();
while ((line = buff.readLine()) != null) {
set.add(line);
}
FileWriter fw = new FileWriter(args[1]);
for (String s : set) {
fw.write(s + "\n");
fw.flush();
}
fw.close();
buff.close();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个OutOfMemoryException所以我的问题是:
我应该如何更改我的代码以获取每行唯一的文件?
提前谢谢你的帮助.
您可以尝试首先查找重复行哈希以识别潜在的重复行:
Map<Integer, Integer> hashes = new HashMap<> ();
Map<Integer, Integer> dupes = new HashMap<> ();
int i = 0;
while ((line = buff.readLine()) != null) {
int hash = line.hashCode();
Integer previous = hashes.get(hash);
if (previous != null) { //potential duplicate
dupes.put(i, previous);
} else {
hashes.put(hash, i);
}
++i;
}
Run Code Online (Sandbox Code Playgroud)
最后你会得到一个可能重复的列表。如果dupes为空,则没有重复项,如果不是,那么您可以对文件进行第二遍检查以检查行是否确实相同。
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |