मैंने huge XML file पर पहले पोस्ट किया था - यह विकिपीडिया डंप के साथ 287 जीबी एक्सएमएल है जिसे मैं सीएसवी फ़ाइल (संशोधन लेखकों और टाइमस्टैम्प) में डाल देना चाहता हूं। मैं कुछ बिंदु तक ऐसा करने में कामयाब रहा। मुझे StackOverflow त्रुटि मिलने से पहले, लेकिन अब पहली समस्या को हल करने के बाद मुझे मिलता है: java.lang.OutOfMemoryError: जावा हीप स्पेस त्रुटि।क्लोजर और जावा हीप स्पेस त्रुटि में बड़ी फ़ाइल
मेरे कोड (आंशिक रूप से जस्टिन क्रेमर जवाब से लिया गया) कि तरह लग रहा है:
(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))))
मैं, article-title
, revision-user
और revision-title
कार्यों को नहीं दिखाते क्योंकि वे बस पेज में एक विशिष्ट स्थान से डेटा ले या संशोधन हैश। कोई भी इस के साथ मेरी मदद कर सकता है - मैं क्लोजर में वास्तव में नया हूं और समस्या नहीं पा रहा हूं।
क्लोरर के लिए नए व्यक्ति के लिए डोरन के बारे में बिंदु थोड़ा स्पष्ट किया जा सकता है: प्रश्न में दिखाए गए खुले फ़ाइल फ़ंक्शन प्रक्रिया-पृष्ठों पर कॉल के परिणामों का अनुक्रम देता है, और जब फ़ंक्शन को प्रतिलिपि से प्रिंट किया जाता है, प्रिंटिंग अनुक्रम सभी परिणामों को एक ही समय में स्मृति में आयोजित करने का कारण बनता है। परिणामस्वरूप डोरन को कॉल करने से अनुक्रम के तत्वों का मूल्यांकन किया जा सकता है और वापस लौटाया जा सकता है, ताकि सभी परिणामों को एक ही समय में स्मृति में रखने की आवश्यकता न हो। स्पष्टीकरण के लिए –
Thanx! मैं समझता हूं (उम्मीद है) अब इस कोड स्निपेट में आलस्य कैसे काम करती है और आपने जो प्रस्तावित किया है उसे बदल दिया है, लेकिन फिर भी 'आउटऑफमेमरी एरर: जावा हीप स्पेस'। मैं अंतिम फ़ाइल के 1 जीबी नमूने पर काम कर रहा हूं, लेकिन यह अभी भी स्मृति त्रुटि को मारता है। किसी भी मदद के लिए वास्तव में आभारी होंगे। – trzewiczek
मेरा नवीनतम अपडेट देखें। अगर आपको अभी भी आउटऑफमेरी त्रुटि मिलती है, तो मुझे यकीन नहीं है कि क्यों। मैंने बिना स्मृति समस्याओं के इस कोड को बहुत समान इस्तेमाल किया। –