2012-11-20 26 views
8

का उपयोग करें मैं^ए को आउटपुट फ़ाइलों को कम करने में कुंजी और मान के बीच विभाजक के रूप में उपयोग करने की कोशिश कर रहा हूं। मैंने पाया config सेटिंग "mapred.textoutputformat.separator" मैं क्या चाहते है कि और यह सही ढंग से करने के लिए विभाजक "" स्विच:हडोप - textouputformat.separator ctrlA (^ ए)

conf.set("mapred.textoutputformat.separator", ","); 

लेकिन यह^एक चरित्र को संभाल नहीं कर सकते हैं:

ERROR security.UserGroupInformation: PriviledgedActionException as:user (auth:SIMPLE) cause:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.RuntimeException: org.xml.sax.SAXParseException; lineNumber: 68; columnNumber: 94; Character reference "&#

मैं इस टिकट https://issues.apache.org/jira/browse/HADOOP-7542 पाया और देखें कि वे त्रि:

conf.set("mapred.textoutputformat.separator", "\u0001"); 

इस त्रुटि फेंकता इसे ठीक करने के लिए एड लेकिन XML1.1 चिंताओं के कारण पैच को वापस कर दिया।

तो मैं सोच रहा हूं कि अगर किसी ने आसानी से अलग करने के लिए विभाजक को^ए (बहुत आम लगता है) को सेट किया है। या अगर मुझे बस बसने और टैब विभाजक का उपयोग करना चाहिए।

धन्यवाद!

मैं CentOS 6.2

+2

उपरोक्त, यह एक वैध प्रश्न है, इसे प्रोत्साहित किया जाना चाहिए। – Siddharth

उत्तर

4

पर चल रहा हूँ Hadoop 0.20.2-cdh3u5 चारों ओर यह वहाँ शायद रहे हैं जैसे तीन विकल्प है कि मैं इस समस्या को हल करने के लिए मिल गया है लग रहा है की तलाश में:

संभव समाधान पर सवाल खड़ा कर रहे हैं:

  1. आप बेस 64 को विभाजक चरित्र को एन्कोड कर सकते हैं। इसके बाद आपको एक कस्टम TextOutputFormat बनाने की आवश्यकता है जो getRecordWriter विधि को ओवरराइड करता है और बेस 64 एन्कोडेड विभाजक को डीकोड करता है।
  2. टैब से डिफ़ॉल्ट विभाजक चरित्र को छोड़कर, एक कस्टम TextOutputFormat फिर से बनाएं।
  3. एक XML संसाधन फ़ाइल के माध्यम से delimiter प्रदान करें। आप जॉब कॉन्फ़िगरेशन की addResource() विधि का उपयोग कर एक कस्टम संसाधन फ़ाइल निर्दिष्ट कर सकते हैं।
+0

धन्यवाद बीएन। # 3 सबसे साफ दृष्टिकोण की तरह लगता है। मैं उसे एक शॉट दूंगा। –