दिलचस्प पोस्ट
जावा ईई फ्रंटएंड विधि में सर्विस लेयर अपवाद को संभालना अक्षम टेक्स्ट बॉक्स का फ़ॉन्ट रंग कैसे बदल सकता है? "Define for if (false) {} else for" के लिए संभावित उपयोग क्या है? क्या ल्यूसीन सूचकांक में संग्रहीत दस्तावेज़ों के माध्यम से पुनरावृत्त करना संभव है? एचटीएमएल / सीएसएस का इस्तेमाल करते हुए एक छवि के आसपास पाठ कैसे लपेटें एक्लिप्स में जेबीस डिबगिंग सेलेनियम 2 में ड्रॉप डाउन विकल्प का चयन कैसे करें 2 डी संख्यात्मक सरणी के सभी स्तंभों की राशि की गणना कैसे करें (कुशलता से) एक ही TextView में तार के विभिन्न फ़ॉन्ट आकार सी ++ सीएमडी कमानों को कार्यान्वित करना C ++ में वास्तव में एक परिभाषा नियम क्या है? Matplotlib आयन () फ़ंक्शन इंटरैक्टिव होने में विफल रहता है कैसे उपयोगकर्ता को PHP में एक फ़ाइल अपलोड की जांच कैसे करें? लिनक्स के लिए पायथन का उपयोग करके कुंजी प्रेस इवेंट का अनुकरण करना Node.js में बड़ी लॉगफाइल पार्सिंग – लाइन-बाय-लाइन में पढ़ें

मैं बहुत बड़ी फ़ाइलों को कैसे सॉर्ट करूँ?

मेरे पास कुछ फ़ाइलें हैं जिन्हें प्रत्येक लाइन की शुरुआत में id के अनुसार सॉर्ट किया जाना चाहिए फाइलें लगभग 2-3 जीबी हैं

मैंने सभी डेटा को एक ArrayList में पढ़ने की कोशिश की और उन्हें सॉर्ट किया। लेकिन स्मृति उन सभी को रखने के लिए पर्याप्त नहीं है। यह काम नहीं करता।

लाइन्स की तरह दिखते हैं

0052304 0000004000000000000000000000000000000041 John Teddy 000023
0022024 0000004000000000000000000000000000000041 George Clan 00013

मैं फाइल कैसे सॉर्ट कर सकता हूं ??

Solutions Collecting From Web of "मैं बहुत बड़ी फ़ाइलों को कैसे सॉर्ट करूँ?"

यह वास्तव में एक जावा समस्या नहीं है आपको डेटा को सॉर्ट करने के लिए एक कुशल एल्गोरिथ्म पर गौर करना होगा जो पूरी तरह से मेमोरी में नहीं पढ़ा है। मर्ज-सॉर्ट के कुछ अनुकूलन इस को प्राप्त कर सकते हैं।

इस पर एक नज़र डालें: http://en.wikipedia.org/wiki/Merge_sort

और: http://en.wikipedia.org/wiki/External_sorting

असल में यह विचार है कि फाइल को छोटे टुकड़ों में तोड़ना, उन्हें सॉर्ट करना (या तो मर्ज सॉर्ट या अन्य विधि के साथ), और फिर मर्ज-मर्ज से नई, सॉर्ट की गई फ़ाइल बनाने के लिए उपयोग करें।

ऐसा करने के लिए आपको बाहरी मर्ज सॉर्ट की आवश्यकता है यहां एक जावा कार्यान्वयन है जो बहुत बड़ी फाइलों को व्यवस्थित करता है।

चूंकि आपके रिकॉर्ड पहले से ही फ्लैट फ़ाइल पाठ प्रारूप में हैं, तो आप उन्हें UNIX sort(1) जैसे पाइप कर सकते हैं जैसे- sort -n -t' ' -k1,1 < input > output यह स्वचालित रूप से डेटा का हिस्सा होगा और उपलब्ध मेमोरी और /tmp का उपयोग कर मर्ज सॉर्ट करेगा। यदि आपको मेमोरी उपलब्ध होने की अपेक्षा अधिक जगह की आवश्यकता है, तो कमांड पर -T /tmpdir जोड़ें।

यह काफी मजाकिया है कि हर कोई आपको बड़ी सी # या जावा पुस्तकालयों को डाउनलोड करने या मर्ज सॉर्ट करने के लिए कह रहा है, जब आप प्रत्येक प्लेटफॉर्म पर उपलब्ध टूल का उपयोग कर सकते हैं और दशकों के आसपास रहे हैं।

सभी डेटा को एक बार में स्मृति में लोड करने के बजाय, आप केवल उस चाबी और एक इंडेक्स को पढ़ सकते हैं जहां रेखा शुरू होती है (और संभवतः लंबाई भी) जैसे

 class Line { int key, length; long start; } 

यह प्रत्येक पंक्ति के बारे में 40 बाइट्स का उपयोग करेगा

एक बार जब आप इस सरणी को हल कर लेते हैं, तो आप रैंडएवसफ़ाइल का उपयोग क्रम में दिखाई देने वाले क्रम में पढ़ने के लिए कर सकते हैं।

नोट: क्योंकि आप बेतरतीब ढंग से डिस्क को मार रहे होंगे, स्मृति का उपयोग करने के बजाय यह बहुत धीमा हो सकता है। एक विशिष्ट डिस्क को डेटा में बेतरतीब ढंग से पहुंचने के लिए 8 एमएस लेता है और यदि आपके पास 10 मिलियन लाइनें हैं तो इसमें लगभग एक दिन का समय लगेगा। (यह पूर्ण सबसे बुरी स्थिति है) स्मृति में यह लगभग 10 सेकंड ले जाएगा।

आप एसक्यूएल लाइट फाइल डीबी का इस्तेमाल कर सकते हैं, डेटा को डीबी में लोड कर सकते हैं और फिर इसे सॉर्ट कर सकते हैं और आपके लिए परिणाम वापस कर सकते हैं।

फायदे: सर्वश्रेष्ठ सॉर्टिंग एल्गोरिथम लिखने के बारे में चिंता करने की आवश्यकता नहीं है।

नुकसान: आपको डिस्क स्पेस, धीमा प्रसंस्करण की आवश्यकता होगी।

https://sites.google.com/site/arjunwebworld/Home/programming/sorting-large-data-files

आपको क्या करने की ज़रूरत है कि फ़ाइलों को स्ट्रीम के माध्यम से काट लें और उन्हें अलग-अलग प्रोसेस करें तब आप फ़ाइलों को एक साथ मर्ज कर सकते हैं, क्योंकि वे पहले से ही सॉर्ट किए जा चुके हैं, यह समान तरीके से कैसे काम करता है के समान है।

इस SO प्रश्न का उत्तर मूल्य का होगा: स्ट्रीम बड़ी फाइलें

ऑपरेटिंग सिस्टम शक्तिशाली फ़ाइल सॉर्टिंग उपयोगिता के साथ आती है एक सरल कार्य जो एक बाँश स्क्रिप्ट कॉल करता है, उसे मदद करनी चाहिए।

 public static void runScript(final Logger log, final String scriptFile) throws IOException, InterruptedException { final String command = scriptFile; if (!new File (command).exists() || !new File(command).canRead() || !new File(command).canExecute()) { log.log(Level.SEVERE, "Cannot find or read " + command); log.log(Level.WARNING, "Make sure the file is executable and you have permissions to execute it. Hint: use \"chmod +x filename\" to make it executable"); throw new IOException("Cannot find or read " + command); } final int returncode = Runtime.getRuntime().exec(new String[] {"bash", "-c", command}).waitFor(); if (returncode!=0) { log.log(Level.SEVERE, "The script returned an Error with exit code: " + returncode); throw new IOException(); } }