hadoop नक्शा सीएसवी में आउटपुट कम करें या मुझे कुंजी मानों की आवश्यकता है?




mapreduce hadoop-streaming (2)

मेरा नक्शा फ़ंक्शन एक का उत्पादन करता है

Key\tValue

मान = सूची (मान 1, मान 2, मान 3)

तो मेरे कम समारोह पैदा करता है:

Key\tCSV-Line

पूर्व।

2323232-2322 fdsfs, sdfs, dfsfs, 0,0,0,2, एफएसडीए, 3, 23,3, एस,

2323555-22222 dfasd, sdfas, adfs, 0,0,2,0, फ़सफा, 2,23, s

पूर्व। रॉडेटा: 232342|@[email protected]|34343|sfasdfasdF|433443|Sfasfdas|324343 x 1000

वैसे भी मैं उस की शुरुआत में कुंजी को समाप्त करना चाहता हूं ताकि मेरा ग्राहक मेरे एसएसएल में एक सीधा आयात कर सके। मेरे पास लगभग 50 डेटा फाइल हैं, मेरा प्रश्न यह है कि एक बार उन्हें नक्शे के बाद और प्रसारण शुरू होने पर उसे मूल्य के साथ मुद्रित कुंजी की आवश्यकता होती है या मैं मूल्य को प्रिंट कर सकता हूं?

अधिक जानकारी:

यहां यह कोड स्थिति पर कुछ बेहतर रोशनी को चमक सकता है

http://pastebin.ca/2410217

यह थोड़े है जो मैं करना चाहता हूं


आपका रिड्यूसर बिना किसी लाइन को छोड सकता है, या, आपके मामले में, आप जिस मूल्य को कॉल कर रहे हैं दुर्भाग्य से, हूओप स्ट्रीमिंग एक शून्य मान के साथ एक कुंजी के रूप में इसकी व्याख्या करेगा और प्रत्येक पंक्ति के अंत में स्वचालित रूप से सीमांकक (\ t डिफ़ॉल्ट रूप से) को जोड़ देगा आप इस सीमांकक को बदल सकते हैं, लेकिन जब मैं इसके साथ खेला करता था, तो मैं इसे एक सीमांकक जोड़ नहीं पाता था। मुझे सटीक विवरण याद नहीं है, लेकिन इस पर आधारित ( हडोप: कुंजी और मान टैब आउटपुट फाइल में विभाजित है। इसे अर्धविराम-पृथक कैसे करना है? ) मुझे लगता है कि संपत्ति को मैप किया गया है। Textxtoutputformat.separator मेरा समाधान प्रत्येक पंक्ति के अंत में \ t को पट्टी करना था क्योंकि मैंने फ़ाइल को वापस खींच लिया था:

hadoop fs -cat hadoopfile | perl -pe 's/\t$//' > destfile

यदि आप कुंजी को NullWritable नहीं चाहते हैं तो इसे अपने कोड में NullWritable लिए सेट करें। उदाहरण के लिए :

public static class TokenCounterReducer extends
            Reducer<Text, IntWritable, NullWritable, IntWritable> {
        public void reduce(Text key, Iterable<IntWritable> values,
                Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable value : values) {
                sum += value.get();
            }
            context.write(NullWritable.get(), new IntWritable(sum));
//          context.write(key, new IntWritable(sum));
        }

मुझे बताएं कि यह आपकी जरूरत नहीं है, मैं इसके अनुसार उत्तर को अपडेट कर दूंगा।