2012-06-08 11 views
7

मेरे पास एक पीआईजी स्क्रिप्ट है जो चार परिणाम बनाती है, मैं उन्हें एक ही फाइल में स्टोर करना चाहता हूं। मैं UNION का उपयोग करने का प्रयास करता हूं, हालांकि जब मैं UNION का उपयोग करता हूं तो मुझे चार फाइलें भाग-एम -00000, भाग-एम -00001, भाग-एम -00002, भाग-एम -00003 मिलती हैं। क्या मुझे एक फाइल मिल सकती है?एक फ़ाइल में पीआईजी में यूनियन के परिणाम संग्रहीत करना

यहाँ सुअर स्क्रिप्ट

A = UNION Message_1,Message_2,Message_3,Message_4 into 'AA'; 

ए.ए. फ़ोल्डर के अंदर मैं जैसा कि ऊपर उल्लेख 4 फ़ाइलें प्राप्त है। क्या मुझे इसमें एक ही फाइल नहीं मिल सकती है जिसमें सभी प्रविष्टियां हैं?

उत्तर

12

पिग सही चीज़ कर रहा है और डेटा सेट को जोड़ रहा है। सभी एक फ़ाइल होने का मतलब हैडोप में एक डेटा सेट नहीं है ... हडोप में एक डेटा सेट आमतौर पर एक फ़ोल्डर होता है। चूंकि इसे यहां कम करने की आवश्यकता नहीं है, इसलिए यह नहीं जा रहा है।

आपको मानचित्र और कम करने के लिए पिग को मूर्ख बनाना होगा। जिस तरह से मैं आमतौर पर ऐसा करने के है:

set default_parallel 1 

... 
A = UNION Message_1,Message_2,Message_3,Message_4; 
B = GROUP A BY 1; -- group ALL of the records together 
C = FOREACH B GENERATE FLATTEN(A); 
... 

GROUP BY रिकॉर्ड के सभी समूहों को एक साथ, और फिर FLATTEN फट कि वापस बाहर की सूची।

$ hadoop fs -cat msg1.txt msg2.txt msg3.txt msg4.txt | hadoop fs -put - union.txt 

(इस पाठ के सभी श्रृंखलाबद्ध है, और फिर एक नया रूप में यह लिख वापस HDFS के लिए बाहर: यहां ध्यान देने योग्य


एक बात यह है कि ऐसा करने से बहुत अलग नहीं है फ़ाइल)

यह समानांतर नहीं है, लेकिन न ही आपके सभी डेटा को एक reducer के माध्यम से फनल कर रहा है।

+3

आप वैश्विक 'default_parallel' को सेट करने के बजाय' GROUP ... 1 समानांतर 1' भी कर सकते हैं। –

1

क्या आपने डिफ़ॉल्ट_परेलल संपत्ति सेट करने का प्रयास किया है?

grunt> set default_parallel 1 
grunt> A = UNION Message_1,Message_2,Message_3,Message_4; 
+0

नहीं, यह अभी भी मुझे 4 फाइलें देता है। मैंने अभी कहा है कि लाइन का उपयोग किया है, grunt> default_parallel 1 सेट करें क्या मुझे सुअर गुणों के बारे में कुछ और करना चाहिए? – Uno

+0

यह एक नक्शा-केवल नौकरी है, इसलिए 'default_parallel' सेटिंग काम नहीं करेगी क्योंकि यह केवल चरण को प्रभावित करती है। यदि यह एक बड़ी नौकरी का हिस्सा है, तो आप स्क्रिप्ट को इस तरह लिखने का प्रयास कर सकते हैं कि आखिरी नौकरी नौकरी कम हो, और फिर उस नौकरी से पहले 'डिफ़ॉल्ट_परेल''' 1'' पर सेट करें, फिर यह काम करेगी। –

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