如何通过比较该文件中的每一行与同一文件中剩余的所有行来处理大文件?
how to process big file with comparison of each line in that file with remaining all lines in same file?
我有一个包含 5,00,000 条记录的 csv 文件。 csv文件中的字段如下
否,姓名,地址
现在我想将每条记录的姓名和地址与所有剩余记录的姓名和地址进行比较。
我是按照以下方式做的
List<String> lines = new ArrayList<>();
BufferedReader firstbufferedReader = new BufferedReader(new FileReader(newFile(pathname)));
while ((line = firstbufferedReader.readLine()) != null) {
lines.add(line);
}
firstbufferedReader.close();
for (int i = 0; i < lines.size(); i++)
{
csvReader = new CSVReader(new StringReader(lines.get(i)));
csvReader = null;
for (int j = i + 1; j < lines.size(); j++)
{
csvReader = new CSVReader(new StringReader(lines.get(j)));
csvReader = null;
application.linesToCompare(lines.get(i),lines.get(j));
}
}
linesToCompare 函数将从各个参数中提取名称和地址并进行比较。如果我发现记录有 80% 匹配(基于姓名和地址),我会将它们标记为重复项。
但是我的这种方法花费了太多时间来处理那个 csv 文件。
我想要一个更快的方法可能是某种地图减少或任何东西。
提前致谢
需要很长时间,因为您似乎正在多次阅读该文件。
您首先将文件读入 lines
列表,然后对每个条目再次阅读,然后在其中再次阅读 again!。不要这样做,而是将文件一次读入 lines
数组,然后使用它来比较条目。
类似这样的内容可能适合您:
List<String> lines = new ArrayList<>();
BufferedReader firstbufferedReader = new BufferedReader(new FileReader(newFile(pathname)));
while ((line = firstbufferedReader.readLine()) != null) {
lines.add(line);
}
firstbufferedReader.close();
for (int i = 0; i < lines.size(); i++)
{
for (int j = i + 1; j < lines.size(); j++)
{
application.linesToCompare(lines.get(i),lines.get(j));
}
}
我有一个包含 5,00,000 条记录的 csv 文件。 csv文件中的字段如下
否,姓名,地址
现在我想将每条记录的姓名和地址与所有剩余记录的姓名和地址进行比较。
我是按照以下方式做的
List<String> lines = new ArrayList<>();
BufferedReader firstbufferedReader = new BufferedReader(new FileReader(newFile(pathname)));
while ((line = firstbufferedReader.readLine()) != null) {
lines.add(line);
}
firstbufferedReader.close();
for (int i = 0; i < lines.size(); i++)
{
csvReader = new CSVReader(new StringReader(lines.get(i)));
csvReader = null;
for (int j = i + 1; j < lines.size(); j++)
{
csvReader = new CSVReader(new StringReader(lines.get(j)));
csvReader = null;
application.linesToCompare(lines.get(i),lines.get(j));
}
}
linesToCompare 函数将从各个参数中提取名称和地址并进行比较。如果我发现记录有 80% 匹配(基于姓名和地址),我会将它们标记为重复项。
但是我的这种方法花费了太多时间来处理那个 csv 文件。
我想要一个更快的方法可能是某种地图减少或任何东西。
提前致谢
需要很长时间,因为您似乎正在多次阅读该文件。
您首先将文件读入 lines
列表,然后对每个条目再次阅读,然后在其中再次阅读 again!。不要这样做,而是将文件一次读入 lines
数组,然后使用它来比较条目。
类似这样的内容可能适合您:
List<String> lines = new ArrayList<>();
BufferedReader firstbufferedReader = new BufferedReader(new FileReader(newFile(pathname)));
while ((line = firstbufferedReader.readLine()) != null) {
lines.add(line);
}
firstbufferedReader.close();
for (int i = 0; i < lines.size(); i++)
{
for (int j = i + 1; j < lines.size(); j++)
{
application.linesToCompare(lines.get(i),lines.get(j));
}
}