जहाँ मैं डाउनलोड करने के लिए, अनज़िप लाइन द्वारा प्रक्रिया लाइन एक बहुत बड़ी CSV फ़ाइल की जरूरत है, और फिर मैं समस्या है के साथ बड़े csv फ़ाइल अनज़िप। मुझे लगता है कि आप इसका अंदाज़ा लगा बड़ी फाइल है देने के लिए उपयोगी होता है:स्ट्रीम और गहरे लाल रंग का
- big_file.zip ~ 700mb
- big_file.csv ~ 23gb
ये कुछ चीजें हैं मैं ऐसा करना चाहते हैं क्या है:
- अनज़िप करने से पहले पूरी फ़ाइल डाउनलोड करने के लिए सीएसवी पंक्तियों को पार्सिंग से पहले पूरी फ़ाइल अनज़िप करने नहीं है नहीं है 0,123,
- बहुत अधिक स्मृति/डिस्क का उपयोग करते हुए यह सब
मुझे लगता है कि यदि संभव है या नहीं पता नहीं है कर रही है। यहाँ मैं क्या सोच रहा था:
require 'open-uri'
require 'rubyzip'
require 'csv'
open('http://foo.bar/big_file.zip') do |zipped|
Zip::InputStream.open(zipped) do |unzipped|
sleep 10 until entry = unzipped.get_next_entry && entry.name == 'big_file.csv'
CSV.foreach(unzipped) do |row|
# process the row, maybe write out to STDOUT or some file
end
end
end
यहाँ समस्याओं मुझे पता है के बारे में बताया गया है:
open-uri
पूरे प्रतिक्रिया पढ़ता है और एकTempfile
, जिसके कारण फ़ाइल इस आकार के साथ अच्छा नहीं है में बचत होती है। मैं शायद सीधेNet::HTTP
उपयोग करने की आवश्यकता हैं, लेकिन मुझे लगता है कि कैसे करना है और अभी भी एकIO
मिल यकीन नहीं है।- मैं नहीं जानता कि कितनी तेजी से डाउनलोड होने जा रहा है या यदि
Zip::InputStream
तरह से मैं काम कर यह दिखाया है काम करता है। क्या यह फ़ाइल में से कुछ को अनजिप कर सकता है जब यह अभी तक नहीं है? - विल rubyzip के
InputStream
साथCSV.foreach
काम करता है? क्या यहFile
की तरह व्यवहार करता है कि यह पंक्तियों को पार करने में सक्षम होगा? अगर यह पढ़ना चाहता है तो क्या यह निकल जाएगा लेकिन बफर खाली है?
मुझे नहीं पता कि इनमें से कोई भी सही दृष्टिकोण है या नहीं। हो सकता है कि कुछ EventMachine समाधान बेहतर होगा (हालांकि मैंने पहले EventMachine उपयोग नहीं किया है, लेकिन अगर यह कुछ इस तरह के लिए बेहतर काम करता है, मैं इसके लिए सभी हूँ)।
मुझे नहीं लगता कि ज़िप स्ट्रीमिंग की वजह से ज़िप स्ट्रीमिंग करने जा रहा है। यह शायद 'funzip' जैसा कुछ कर सकता है अगर ज़िप में केवल एक फ़ाइल थी (या जिसे मैं पहले चाहता था) लेकिन ऐसा नहीं है। – ZombieDev