Ich gepostet zuvor auf eine huge XML file - es ist ein 287GB XML mit Wikipedia-Dump ich möchte ot in CSV-Datei (Revisionen Autoren und Zeitstempel). Das habe ich bis zu einem gewissen Punkt geschafft. Bevor ich den StackOverflow Error bekomme, bekomme ich nun nach dem Lösen des ersten Problems: java.lang.OutOfMemoryError: Java Heap Space Fehler.Riesige Datei in Clojure und Java Heap-Platz Fehler
Mein Code (zum Teil von Justin Kramer Antwort genommen) sieht so aus:
(defn process-pages
[page]
(let [title (article-title page)
revisions (filter #(= :revision (:tag %)) (:content page))]
(for [revision revisions]
(let [user (revision-user revision)
time (revision-timestamp revision)]
(spit "files/data.csv"
(str "\"" time "\";\"" user "\";\"" title "\"\n")
:append true)))))
(defn open-file
[file-name]
(let [rdr (BufferedReader. (FileReader. file-name))]
(->> (:content (data.xml/parse rdr :coalescing false))
(filter #(= :page (:tag %)))
(map process-pages))))
ich nicht zeigen article-title
, revision-user
und revision-title
Funktionen, weil sie einfach nur Daten aus einem bestimmten Ort in der Seite nehmen oder Revisions-Hash. Jeder könnte mir dabei helfen - ich bin wirklich neu in Clojure und bekomme das Problem nicht.
Der Punkt über Dorun könnte für jemanden, der neu in Clojure ist, ein wenig klarer gemacht werden: Die Funktion open-file, wie in der Frage gezeigt, gibt die Reihenfolge der Aufrufe von process-pages zurück und beim Aufruf der Funktion repl Die Sequenz bewirkt, dass alle Ergebnisse gleichzeitig im Speicher gehalten werden. Der Aufruf von dorun für das Ergebnis bewirkt, dass die Elemente der Sequenz ausgewertet werden und nil zurückgegeben wird, so dass niemals alle Ergebnisse gleichzeitig im Speicher vorhanden sein müssen. –
Danke für die Erklärung! Ich verstehe (hoffentlich) jetzt, wie die Faulheit in diesem Code-Snippet funktioniert und änderte, was Sie vorgeschlagen haben, aber immer noch "OutOfMemoryError: Java-Heap-Space". Ich arbeite an einem 1 GB-Beispiel der endgültigen Datei, aber es tritt immer noch der Speicherfehler auf. Wäre wirklich dankbar für jede Hilfe. – trzewiczek
Siehe mein letztes Update. Wenn Sie immer noch einen OutOfMemory-Fehler erhalten, bin ich mir nicht sicher warum. Ich habe Code sehr ähnlich verwendet, ohne Speicherprobleme. –