Beste Weg, um zu vergleichen, große csv-Dateien?
Ich muss eine Anwendung, vergleicht einige sehr große csv
- Dateien, jeweils mit 40.000 Sätze. Ich habe eine Anwendung, das funktioniert einwandfrei, aber er verbringt viel Zeit zu tun, dass der Vergleich, da die beiden Dateien könnte disordenated oder unterschiedliche Datensätze - das muss ich iterate (40000^2)*2-mal.
Hier ist mein code:
if (nomFich.equals("CAR"))
{
while ((linea = br3.readLine()) != null)
{
array =linea.split(",");
spliteado = array[0]+array[1]+array[2]+array[8];
FileReader fh3 = new FileReader(cadena + lista2[0]);
BufferedReader bh3 = new BufferedReader(fh3);
find=0;
while (((linea2 = bh3.readLine()) != null))
{
array2 =linea2.split(",");
spliteado2 = array2[0]+array2[1]+array2[2]+array2[8];
if (spliteado.equals(spliteado2))
{
find =1;
}
}
if (find==0)
{
bw3.write("+++++++++++++++++++++++++++++++++++++++++++");
bw3.newLine();
bw3.write("Se han incorporado los siguientes CGI en la nueva lista");
bw3.newLine();
bw3.write(linea);
bw3.newLine();
aparece=1;
}
bh3.close();
}
Ich denke, dass mit einem Set
in Java ist eine gute option, wie der folgende Beitrag nahelegt:
Vergleich von zwei csv-Dateien in Java
Aber vorher versuche ich es auf diesem Weg, ich würde gerne wissen, ob es irgendwelche bessere Optionen.
Dank für alles.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich das interpretieren kann, Ihren code, den Sie brauchen, um herauszufinden, welche Zeilen in der ersten CSV-Datei nicht die gleiche Linie in der zweiten CSV-Datei. Richtig?
Wenn das so ist, brauchen Sie nur, um alle Zeilen aus der zweiten CSV-Datei in eine
HashSet
. Wie so (Java-7-code):Danach können Sie einfach Durchlaufen der Zeilen in der ersten CSV-Datei und vergleichen:
Nicht, dass zu deinen Bedürfnissen passen?
Vorausgesetzt, dies alles nicht in den Speicher passt, würde ich zuerst konvertieren Sie die Dateien in Ihr abgespeckte Versionen (el0, el1, el2, el8, orig-file-line-nr-für-Referenz-danach) und dann Sortieren Sie sagte-Dateien. Danach können Sie den Strom durch beide Dateien gleichzeitig und vergleichen Sie die Datensätze, wie Sie gehen... Wobei die Sortierung aus der Gleichung, die Sie nur brauchen, um Sie vergleichen zu 'einmal'.
Aber ich vermute, Sie könnte das gleiche tun mit einer Liste/Array-Objekt, das es ermöglicht, für das Sortieren und speichern im Speicher; 40k Datensätze wirklich klingt nicht viel zu mir, es sei denn, die Elemente sehr groß sind, natürlich. Und es geht um Größenordnungen schneller.