मैं पाठ फ़ाइलों में विशिष्ट उपयोगकर्ताओं के लिए टाइमस्टैंप मान हो कहो,Hadoop में पाठ से CustomWritable पार्स करने के लिए कैसे
#userid; unix-timestamp; value
1; 2010-01-01 00:00:00; 10
2; 2010-01-01 00:00:00; 20
1; 2010-01-01 01:00:00; 11
2; 2010-01-01 01:00:00, 21
1; 2010-01-02 00:00:00; 12
2; 2010-01-02 00:00:00; 22
जैसे मैं एक कस्टम वर्ग "SessionSummary" readFields और को लागू करने WritableComparable के लिखने है। इसका उद्देश्य प्रत्येक कैलेंडर दिन के लिए प्रति उपयोगकर्ता के सभी मूल्यों को जोड़ना है।
तो नक्शाकार प्रत्येक उपयोगकर्ता के लिए लाइनों के नक्शे, कम करने उपयोगकर्ता प्रति दिन प्रति सभी मूल्यों को सारांशित और आउटपुट TextOutputFormat के रूप में एक SessionSummary (की toString का उपयोग कर SessionSummary, टैब से अलग UTF-8 स्ट्रिंग के रूप में):
1; 2010-01-01; 21
2; 2010-01-01; 41
1; 2010-01-02; 12
2; 2010-01-02; 22
यदि मुझे दूसरे मानचित्र/चरण को कम करने के लिए इन सारांश-प्रविष्टियों का उपयोग करने की आवश्यकता है, तो सदस्यों को पॉप्युलेट करने के लिए मुझे इस सारांश डेटा को कैसे पार्स करना चाहिए? क्या मैं डेटा इनपुट किसी भी तरह टेक्स्ट स्ट्रिंग का उपयोग कर मौजूदा रीडफिल्ड्स और लिखने के तरीकों का उपयोग कर सकता हूं (लिखने योग्य योग्य इंटरफ़ेस कार्यान्वयन)। यह (जाहिर है) काम नहीं किया:
public void map(...) {
SessionSummary ssw = new SessionSummary();
ssw.readFields(new DataInputStream(new ByteArrayInputStream(value.getBytes("UTF-8"))));
}
सामान्य में: वहाँ है, जबकि मानव पठनीय पाठ रखते हुए, Hadoop में कस्टम कुंजी और मान को लागू करने और उन्हें आसानी से कई एम/आर चरणों में पुन: प्रयोज्य बनाने के लिए एक सबसे अच्छा अभ्यास है प्रत्येक चरण में उत्पादन?
(Hadoop संस्करण है 0.20.2/CDH3u3)
धन्यवाद क्रिस! तो दूसरी एमआर नौकरी के लिए, मैंने conf.setInputFormat (SequenceFileInputFormat.class) सेट किया है, और मैपर कुंजी और मान वर्ग पहले Reducer के आउटपुट के समान हैं, सही? – thomers
यह सही है। –
मैं दूसरी एमआर नौकरी के लिए मैपर कुंजी और मूल्य वर्गों को स्पष्ट रूप से कैसे सेट करूं? मैं IdentityMapper के साथ परीक्षण कर रहा हूं, और यह टेक्स्ट को कुंजी के रूप में उम्मीद करता है। – thomers