मेरे पास शब्द नामक एक दस्तावेज़ है, और प्रत्येक पंक्ति में एक नया शब्द है। मैं इनमें से प्रत्येक शब्द को इसके घटक पात्रों की सूची में बदलना चाहता हूं। मैं इसे केवल list(x) करके करता हूं जहां x शब्द है।

मैं यही कर रहा हूं, लेकिन मैं इसे समानांतर करने का एक तरीका चाहता हूं:

split = []
with open('wordprob.txt','rt') as lines:
    for line in lines:
        split.append(list(line))

मैं इस दृष्टिकोण का उपयोग कर रहा हूं ताकि मुझे पूरी फ़ाइल (3 जीबी से अधिक) को मेमोरी में लोड न करना पड़े। फ़ाइल को पहले लोड करके इसे समानांतर करते समय, मेरी मेमोरी का उपयोग 16 जीबी से अधिक हो जाता है।

फ़ाइल को स्मृति में लोड किए बिना मैं इसे समानांतर कैसे कर सकता हूं, जैसे उपरोक्त लूप में?

धन्यवाद!

संपादित करें: नीचे यह बताया गया था कि सूची में बहुत सारी मेमोरी होगी। इसके बजाय, मैं वर्णों की प्रत्येक सूची (मूल रूप से एक शब्द से) को एक नए दस्तावेज़ की एक नई पंक्ति पर एक स्पेस सीमांकित स्ट्रिंग के रूप में कैसे संग्रहीत करूं। दोबारा, मैं समांतर समाधान की तलाश में हूं।

1
Keshav M 9 मई 2018, 02:23

1 उत्तर

सबसे बढ़िया उत्तर

अगर मैं समस्या को सही ढंग से समझता हूं, तो आपके पास एक फाइल है जैसे

sushi
banana
sujuk
strawberry
tomato
pho
ramen
manaqish

और आप इस तरह एक नई फ़ाइल बनाना चाहते हैं:

s u s h i
b a n a n a
s u j u k
s t r a w b e r r y
t o m a t o
p h o
r a m e n
m a n a q i s h

तो आप एक साधारण stdin-stdout प्रोग्राम लिख सकते हैं, जैसे कुछ

import sys
for line in sys.stdin:
    sys.stdout.write(' '.join(list(line)))

यदि सभी डेटा एक ही फ़ाइल में जाते हैं, तो भले ही आप समानांतर हों, आपके प्रत्येक थ्रेड या प्रक्रिया समान आउटपुट फ़ाइल में लिखने के लिए प्रतिस्पर्धा करेंगे।

यदि आप वास्तव में समानांतर बनाना चाहते हैं और आप पायथन के साथ रहना चाहते हैं, तो आप Hadoop Streaming का उपयोग कर सकते हैं। आपकी नौकरी केवल मैपर वाली नौकरी होगी; वास्तव में मैपर ऊपर की तीन लाइन की स्क्रिप्ट है। लेकिन मुझे यकीन नहीं है कि यह आपको तब तक ज्यादा खरीदता है जब तक कि आपका डेटा सेट हास्यास्पद रूप से बड़ा न हो। परिवर्तन बहुत सरल है, लेकिन यह देखने के लिए कि क्या आपको अधिक लाभ मिलता है, नौकरी की रूपरेखा तैयार करने में संकोच न करें।

मुझे नहीं लगता कि 3GB बहुत अधिक है, लेकिन Hadoop (या जो भी बच्चे इन दिनों उपयोग कर रहे हैं) में यह एक मजेदार व्यायाम हो सकता है।

1
Ray Toal 9 मई 2018, 09:25