2016-01-18 8 views
5

इम एक बड़ी फ़ाइल में एवरो फ़ाइलें मर्ज करने का प्रयास का उपयोग करके फ़ाइलें, समस्या concat आदेश है वाइल्डकार्ड को स्वीकार नहीं करताConcat एवरो एवरो उपकरण

hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro 

मैं:

सूत्र में अपवाद "मुख्य" java.io.FileNotFoundException: फ़ाइल मौजूद नहीं है:/इनपुट/भाग *

मैं "" एक का उपयोग करने की कोशिश की nd '' लेकिन कोई मौका नहीं।

+0

आपकी इनपुट फाइलें कहां हैं? – zhutoulala

+0

@zhutoulala कुछ फाइलें हैं/इनपुट/' – 54l3d

+0

@ 54l3d: मुझे लगता है कि सवाल यह था: क्या वे स्थानीय फाइल सिस्टम या एचडीएफएस पर संग्रहीत हैं? –

उत्तर

7

मैंने जल्दी ही एवरो के स्रोत कोड (1.7.7) की जांच की और ऐसा लगता है कि कॉन्सट ग्लोब पैटर्न का समर्थन नहीं करता है (मूल रूप से, वे पिछले एक को छोड़कर प्रत्येक तर्क पर FileSystem.open() पर कॉल करते हैं)।

इसका मतलब है कि आपको स्पष्ट रूप से सभी फ़ाइल नामों को तर्क के रूप में प्रदान करना होगा। यह बोझिल है, लेकिन निम्न आदेश आप क्या चाहते हैं करना चाहिए:

IN=$(hadoop fs -ls /input/part* | awk '{printf "%s ", $NF}') 
hadoop jar avro-tools.jar concat ${IN} /output/bigfile.avro 

यह इस आदेश को ग्लोब पैटर्न के समर्थन जोड़ने के लिए एक अच्छा इसके अतिरिक्त होगा।

+0

पर हैं, हैडूप एफएस लिस्टिंग –

+1

@EdiBice से "मिली xxx आइटम" को फ़िल्टर करना सुनिश्चित करें उदाहरण को अपडेट किया गया। पारितोषिक के लिए धन्यवाद! – erwaman

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