मेरे पास एक फ़ाइल है (आकार = ~ 1.9 जीबी) जिसमें ~ 220,000,000 (~ 220 मिलियन) शब्द/तार शामिल हैं। उनके पास नकल है, हर 100 शब्दों में लगभग 1 डुप्लिकेट शब्द।जब शब्द 200 मिलियन से अधिक होते हैं तो जावा का उपयोग करके डुप्लिकेट शब्दों को कैसे हटाया जाए?
मेरे दूसरे कार्यक्रम में, मैं फ़ाइल को पढ़ना चाहता हूं। मैं BufferedReader का उपयोग कर लाइनों द्वारा फ़ाइल को पढ़ने में सफल हूं।
अब डुप्लिकेट को निकालने के लिए, हम सेट का उपयोग कर सकते है (और यह कार्यान्वयन है), लेकिन के रूप में 3 विभिन्न परिदृश्यों में निम्न वर्णित सेट, समस्या है:
-
डिफ़ॉल्ट JVM आकार के साथ
- , सेट अप 0.7- को शामिल कर सकते हैं 0.8 मिलियन शब्द, और फिर OutOfMemoryError।
- 512 एम जेवीएम आकार के साथ, सेट में 5-6 मिलियन शब्द, और फिर ओओएम त्रुटि हो सकती है।
- 1024 एम जेवीएम आकार के साथ, सेट में 12-13 मिलियन शब्द, और फिर ओओएम त्रुटि हो सकती है। सेट में 10 मिलियन रिकॉर्ड के अतिरिक्त होने के बाद, ऑपरेशन बेहद धीमी हो जाती है। उदाहरण के लिए, अगले ~ 4000 रिकॉर्ड के अलावा, इसमें 60 सेकंड लग गए।
मेरे पास प्रतिबंध हैं कि मैं JVM आकार को आगे नहीं बढ़ा सकता, और मैं फ़ाइल से डुप्लिकेट शब्दों को हटाना चाहता हूं।
अगर आपको ऐसी विशाल फ़ाइल से जावा का उपयोग करके डुप्लिकेट शब्दों को हटाने के लिए किसी अन्य तरीके/दृष्टिकोण के बारे में कोई जानकारी है, तो कृपया मुझे बताएं। बहुत धन्यवाद :)
प्रश्न के लिए जानकारी का जोड़: मेरे शब्द मूल रूप से अल्फा-न्यूमेरिक हैं और वे आईडी हैं जो हमारे सिस्टम में अद्वितीय हैं। इसलिए वे सादे अंग्रेजी शब्द नहीं हैं।
, आप स्टोर करने के लिए एक डेटाबेस या यहां तक कि एक दूसरे फ़ाइल इस्तेमाल कर सकते हैं परिणाम? –
मुझे लगता है कि आप लंबे समय तक फिर से चलने जा रहे हैं। –
मैं सुनिश्चित करता हूं कि मेरे पास कार्य के लिए पर्याप्त स्मृति है। आप लगभग $ 100 के लिए 16 जीबी पीसी मेमोरी खरीद सकते हैं। इन दिनों इतना खर्च नहीं होता है। –