2010-05-30 17 views
30

मेरे पास बड़ी मात्रा में डेटा (कुछ टेराबाइट्स) हैं और जमा हो रहे हैं ... वे कई टैब-सीमांकित फ्लैट टेक्स्ट फ़ाइलों (प्रत्येक के बारे में 30 एमबी) में निहित हैं। अधिकांश कार्य में अनुमानित विवरणों की श्रृंखला के आधार पर अवलोकन/पंक्तियों पर डेटा और एकत्रण (संक्षेप/औसत + अतिरिक्त परिवर्तन) को पढ़ने और फिर आउटपुट को टेक्स्ट, एचडीएफ 5, या SQLite फ़ाइलों आदि के रूप में सहेजना शामिल है। मैं आम तौर पर आर का उपयोग करता हूं ऐसे कार्यों के लिए लेकिन मुझे डर है कि यह थोड़ा बड़ा हो सकता है। कुछ लोग इसमें समाधान करने के लिएकई टेक्स्ट फ़ाइलों में बड़ी मात्रा में डेटा - प्रक्रिया कैसे करें?

  1. सी (या फोरट्रान) में पूरी बात लिखने हैं
  2. एक रिलेशनल डेटाबेस सीधे में फ़ाइलें (टेबल्स) आयात और तो आर या अजगर में हिस्सा (कुछ हटा परिवर्तनों के नहीं शुद्ध एसक्यूएल समाधान के लिए उत्तरदायी होते हैं)
  3. अजगर में पूरी बात

चाहेंगे (3) एक बुरा विचार हो बारे में? मुझे पता है कि आप पाइथन में सी रूटीन को लपेट सकते हैं लेकिन इस मामले में कम्प्यूटेशनल रूप से निषिद्ध कुछ भी नहीं है (उदाहरण के लिए, ऑप्टिमाइज़ेशन रूटीन जो कई पुनरावृत्तियों की गणना की आवश्यकता होती है), मुझे लगता है कि I/O गणना के रूप में उतनी ही बाधा हो सकती है। क्या आपके पास आगे विचारों या सुझावों पर कोई सिफारिश है? धन्यवाद

संपादित करें अपने प्रतिक्रियाओं के लिए धन्यवाद। हडोप के बारे में विवादित राय प्रतीत होती है, लेकिन किसी भी मामले में मेरे पास क्लस्टर तक पहुंच नहीं है (हालांकि मैं कई अनवरोधित मशीनों का उपयोग कर सकता हूं) ...

+1

महान प्रश्न, यह जैविक अनुक्रम डेटा के साथ एक ही समस्या की तरह लगता है। – Stedy

उत्तर

13

(3) आवश्यक रूप से एक बुरा विचार नहीं है - पायथन "सीएसवी" फ़ाइल को संसाधित करना आसान बनाता है (और कॉमा के लिए सी खड़े होने के बावजूद, एक विभाजक के रूप में टैब को संभालना उतना ही आसान है) और निश्चित रूप से आई/ओ ओप में किसी भी अन्य भाषा के रूप में बैंडविड्थ के बारे में बस इतना ही मिलता है। अन्य सिफारिशों के लिए, numpy, तेज़ गणना के अलावा (जिसे आपको अपने बयानों के अनुसार आवश्यकता नहीं हो सकती है) बहुत आसान, लचीला बहु-आयामी सरणी प्रदान करता है, जो आपके कार्यों के लिए काफी आसान हो सकता है; और मानक लाइब्रेरी मॉड्यूल multiprocessing आपको किसी भी कार्य के लिए एकाधिक कोर का फायदा उठाने देता है जो समानांतर करना आसान है (महत्वपूर्ण है क्योंकि इन दिनों लगभग हर मशीन में बहु-कोर हैं ;-)।

+0

मुझे लगता है कि मैं पाइथन, न्यूमपी, और मल्टीप्रोसेसिंग को एक कोशिश दूंगा ... बहुत धन्यवाद। – hatmatrix

+0

सहमत हुए। पायथन का प्रदर्शन प्रदर्शन जुर्माना वास्तविक दुनिया में ज्यादा उपस्थिति नहीं बनाता है। –

6

Disco पर एक नज़र डालें। यह एक हल्के वितरित मैपरेडस इंजन है, जो एरलांग की लगभग 2000 लाइनों में लिखा गया है, लेकिन विशेष रूप से पायथन विकास के लिए डिज़ाइन किया गया है। यह न केवल आपके डेटा पर काम करने का समर्थन करता है, बल्कि एक प्रतिकृति को विश्वसनीय रूप से संग्रहीत करता है। उन्होंने अभी संस्करण 0.3 जारी किया है, जिसमें एक अनुक्रमण और डेटाबेस परत शामिल है।

+0

धन्यवाद - मुझे डिस्को पर नजर रखना होगा। मुझे डेटाबेस परत पर अधिक दस्तावेज नहीं मिल सका, और शायद मैपरेडस ढांचा इस समय मेरे हार्डवेयर के लिए उपयुक्त नहीं है ... – hatmatrix

+0

डिस्कोडब एक गरीब व्यक्ति का डेटाबेस है। यह मूल रूप से सिर्फ एक वितरित हैश तालिका है जो डीडीएफ के शीर्ष पर बैठती है। मुझे इसके बारे में ज्यादा जानकारी नहीं है, क्योंकि यह बहुत नया है। –

2

यदि आपके पास मशीनों का समूह है तो आप हैडोप मैप्रिडस का उपयोग करके अपने आवेदन को समानांतर बना सकते हैं। हालांकि जावा में हाडोप लिखा गया है, यह भी पाइथन चला सकता है। आप अपने कोड को समानांतर करने में पॉइंटर्स के लिए निम्न लिंक चेकआउट कर सकते हैं - PythonWordCount

+0

धन्यवाद ~ इसके लिए नेटवर्क वाली मशीनों का समूह नहीं है ... – hatmatrix

1

हां। तुम सही हो! I/O आपके अधिकांश प्रसंस्करण समय का खर्च आएगा। मैं आपको इस कार्य के लिए, हडूप जैसे वितरित सिस्टम का उपयोग करने का सुझाव नहीं देता हूं।

आपका काम मामूली वर्कस्टेशन में किया जा सकता है। मैं पाइथन विशेषज्ञ नहीं हूं, मुझे लगता है कि इसमें एसिंक्रोनस प्रोग्रामिंग के लिए समर्थन है। एफ #/नेट में, मंच के लिए इसका अच्छा समर्थन है। मैं एक बार एक छवि प्रसंस्करण नौकरी कर रहा था, डिस्क पर 20K छवियों को लोड कर रहा था और उन्हें फीचर वेक्टर में बदल सकता था, केवल समानांतर में कई मिनट खर्च करता था।

सब कुछ, समानांतर में अपने डेटा को लोड और संसाधित करें और परिणामस्वरूप डेटाबेस (यदि बड़ा हो) में स्मृति (यदि छोटा हो) में सहेजें।

+0

धन्यवाद - मुझे उम्मीद है। मेरे पास मेरे निपटारे में कुछ मामूली वर्कस्टेशंस हैं (और कुछ समय) – hatmatrix

4

टेराबाइट्स के साथ, आप वैसे भी कई डिस्क पर अपने पढ़ने को समानांतर करना चाहते हैं; तो साथ ही सीधे हडोप में भी जा सकते हैं।

डेटा पूछने के लिए सुअर या हाइव का उपयोग करें; दोनों उपयोगकर्ता-परिभाषित परिवर्तनों के लिए व्यापक समर्थन रखते हैं, इसलिए आपको कस्टम कोड का उपयोग करके जो करना है उसे लागू करने में सक्षम होना चाहिए।

+0

पिग या हाइव के बारे में नहीं पता था - यह ध्यान में रखेगा ... – hatmatrix

13

ठीक है, तो बस अलग होना, आर क्यों नहीं?

  • आप राम के कुछ ही GB के साथ मानक कार्य केंद्र पर बड़ी नहीं है तो आप काम कर कोड फ़ाइल प्रति जल्दी से
  • 30 एमबी करने के लिए मिल सकता है आर पता लगते
  • read.table() की read.csv() संस्करण बहुत ही कुशल हो सकता है यदि आप colClasses तर्क के माध्यम से कॉलम के प्रकार निर्दिष्ट करें: बजाय रूपांतरण के लिए प्रकार guestimating की, इन कुशलता से संभाला जाएगा
  • टोंटी यहाँ मैं है/ओ डिस्क से और है कि हर भाषा
  • आर 0 है के लिए एक ही हैएकाधिक कोर के साथ मशीनों पर समानांतर प्रसंस्करण स्थापित करने के लिए (पाइथन के मल्टीप्रोसेसिंग के समान, ऐसा लगता है)
  • क्या आप समस्या की 'शर्मनाक समानांतर' संरचना को नियोजित करना चाहते हैं, आर में कई पैकेज हैं जो डेटा- समानांतर समस्याएं: जैसे snow और foreach प्रत्येक को केवल एक मशीन पर या नेटवर्क वाली मशीनों के सेट पर तैनात किया जा सकता है।
+0

मुझे लगता है कि यह आर के साथ किया जा सकता है, लेकिन मेरे हिस्से का मानना ​​है कि यह नहीं है सही उपकरण? हालांकि आपके द्वारा शामिल किए गए सभी अतिरिक्त विचारों के साथ यह निश्चित रूप से काम करने के लिए बनाया जा सकता है ... मैंने हाल ही में डेटा.फ्रेम (स्कैन (फ़ाइल नाम, क्या = सूची (...)) का उपयोग करना शुरू कर दिया है) इनपुट लेकिन colClasses निर्दिष्ट करना सिर्फ एक और अच्छा विचार हो सकता है। धन्यवाद ~ – hatmatrix

+2

@Stephen इस धागे को जांचना न भूलें http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r – Marek

+0

धन्यवाद! मैं लंबे समय से आर उपयोगकर्ता रहा हूं लेकिन यह बहुत उपयोगी है – hatmatrix

2

जब आप "संचय" कहते हैं तो समाधान (2) समस्या के लिए सबसे उपयुक्त दिखता है।
डेटाबेस तक प्रारंभिक लोड के बाद आप केवल नई फाइलों के साथ डेटाबेस अपडेट करते हैं (दैनिक, साप्ताहिक? निर्भर करता है कि आपको कितनी बार इसकी आवश्यकता होती है)।

मामलों में (1) और (3) आपको प्रत्येक बार फ़ाइलों को संसाधित करने की आवश्यकता होती है (जिसे अधिकांश समय/संसाधन-उपभोग करने वाले पहले कहा गया था), जब तक आपको संग्रहीत परिणामों का कोई तरीका न मिल जाए और उन्हें नई फ़ाइलों के साथ अपडेट न करें।

आप सीएसवी से फ़ाइलों को संसाधित करने के लिए आर का उपयोग कर सकते हैं, उदाहरण के लिए, SQLite डेटाबेस।

+0

आह हाँ, मैं देखता हूं कि आपका क्या मतलब है ... लेकिन एक बार जब मैं प्रत्येक पाठ फ़ाइल को संसाधित करता हूं तो मैं परिणामों को SQLite फ़ाइल और काम में सबसे अधिक संभावना दूंगा पोस्ट-विश्लेषण के लिए इन परिणामों के साथ। मैं जो समेकित करता हूं वह एक प्रकार का औसत है (यह अनुदैर्ध्य डेटा है) इसलिए मुझे वर्तमान फाइल का विश्लेषण करते समय पिछली फाइलों को दोबारा आयात नहीं करना पड़ेगा (यही कारण है कि मैपरेडस मुझे समझ में आएगा ...)। – hatmatrix

4

मुझे अमेज़ॅन के लोचदार मानचित्र कम करने पर हडोप के साथ आर का उपयोग करके शुभकामनाएं मिली हैं। ईएमआर के साथ आप केवल उस कंप्यूटर समय के लिए भुगतान करते हैं जिसका उपयोग आप करते हैं और एएमजेडएन कताई और उदाहरणों को कताई करने का ख्याल रखता है। ईएमआर में नौकरी की संरचना कैसे करें वास्तव में इस बात पर निर्भर करता है कि आपके विश्लेषण वर्कफ़्लो को कैसे संरचित किया गया है। उदाहरण के लिए, प्रत्येक सीएसवी के अंदर पूरी तरह से निहित एक नौकरी के लिए आवश्यक सभी रिकॉर्ड हैं या क्या आपको विश्लेषण पूरा करने के लिए प्रत्येक सीएसवी से बिट्स की आवश्यकता है?

यहां कुछ संसाधन उपयोगी लग सकते है:

  • पीट Skomoroch के बारे में R and AMZN EMR on the AMZN discussion forum
  • मेरे ब्लॉग पोस्ट में बात कर के बारे में getting started with R and AMZN EMR
  • Rhipe project आर और Hadoop एकीकृत करने के लिए करना है। रिप्प ईएमआर पर केंद्रित नहीं है, हालांकि, मैंने अभी तक इसका उपयोग नहीं किया है। ऐसा लगता है कि यह ईएमआर के लिए पुल योग्य होना चाहिए, हालांकि।

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

हालांकि यह एक रिलेशनल डेटाबेस में इसे/बाहर निकालने का प्रयास करने के लिए मोहक है, लेकिन मैं सावधानीपूर्वक विचार करता हूं कि आपको वास्तव में आरडीबी के सभी ओवरहेड की आवश्यकता है या नहीं। यदि आप नहीं करते हैं, तो आप कोई वास्तविक इनाम के साथ एक बाधा और विकास चुनौती पैदा कर सकते हैं।

+0

बहुत बहुत धन्यवाद - मुझे लगता है कि एक सवाल यह बनी हुई है कि क्या यह डेटा को उनके बुनियादी ढांचे में स्थानांतरित करने के ऊपरी हिस्से के लायक है! – hatmatrix

संबंधित मुद्दे