2012-12-04 13 views
9

पर निर्यात करें मुझे सुअर से और सीएसवी में डेटा प्राप्त करने में बहुत परेशानी हो रही है जिसे मैं एक्सेल या एसक्यूएल (या आर या एसपीएसएस इत्यादि) में बहुत अधिक कुशलता के बिना उपयोग कर सकता हूं ...सुअर से सीएसवी

मैं निम्नलिखित समारोह का उपयोग कर की कोशिश की है:

STORE pig_object INTO '/Users/Name/Folder/pig_object.csv' 
    USING CSVExcelStorage(',','NO_MULTILINE','WINDOWS'); 

यह अंशकालिक एम-0000 # फ़ाइलों के बहुत सारे के साथ कि नाम के साथ फ़ोल्डर बनाता है। मैं बाद में बिल्ली भाग *> filename.csv का उपयोग करके उन सभी में शामिल हो सकता हूं लेकिन कोई हेडर नहीं है जिसका अर्थ है कि मुझे इसे मैन्युअल रूप से रखना होगा।

मैंने पढ़ा है कि पिगस्टोरेजशेमा को हेडर के साथ एक और बिट बनाना है, लेकिन यह बिल्कुल काम नहीं करता है, उदाहरण के लिए, मुझे एक ही परिणाम मिलता है जैसे कि यह अभी संग्रहीत है, कोई हेडर फ़ाइल नहीं है: स्टोर pig_object INTO '/ उपयोगकर्ता/नाम/फ़ोल्डर/pig_object' org.apache.pig.piggybank.storage.PigStorageSchema() का उपयोग करना;

(मैंने स्थानीय और मैप्रिडस मोड दोनों में यह कोशिश की है)।

क्या इन एकाधिक चरणों के बिना पिग से डेटा को एक सरल सीएसवी फ़ाइल में प्राप्त करने का कोई तरीका है?

किसी भी मदद की बहुत सराहना की जाएगी!

उत्तर

28

मुझे डर है कि वहाँ एक एक लाइनर जो काम करता है नहीं है, लेकिन अपने अनुसरणकर्ताओं के साथ आ सकते हैं (सुअर v0.10.0):

A = load '/user/hadoop/csvinput/somedata.txt' using PigStorage(',') 
     as (firstname:chararray, lastname:chararray, age:int, location:chararray); 
store A into '/user/hadoop/csvoutput' using PigStorage('\t','-schema'); 

जब PigStorage लेता है '-schema' यह आउटपुट निर्देशिका में '.pig_schema' और '.pig_header' बनाएगा। तो फिर तुम 'के साथ part-x-xxxxx' '.pig_header' मर्ज करने के लिए है:

1. परिणाम स्थानीय डिस्क को कॉपी किया द्वारा की जरूरत है:

hadoop fs -rm /user/hadoop/csvoutput/.pig_schema 
hadoop fs -getmerge /user/hadoop/csvoutput ./output.csv 

(-getmerge एक इनपुट निर्देशिका आप प्राप्त करने की आवश्यकता लेता है के बाद से

hadoop fs -cat /user/hadoop/csvoutput/.pig_header 
    /user/hadoop/csvoutput/part-x-xxxxx | 
    hadoop fs -put - /user/hadoop/csvoutput/result/output.csv 
: .pig_schema पहले)

2. HDFS पर परिणाम भंडारण से छुटकारा

आगे आप भी इन पदों पर एक नज़र हो सकता संदर्भ के लिए: यदि आप PigStorage HDFS पर के रूप में अपने डेटा स्टोर और फिर -getmerge -nl का उपयोग कर इसे विलय
STORE output to a single CSV?
How can I concatenate two files in hadoop into one using Hadoop FS shell?

+0

धन्यवाद, Lorand। खोल कमांड को कॉल करना चीजों को थोड़ा सा साफ करता है। हालांकि, जब मैं इसे चलाता हूं तो -स्केमा तर्क .pig_header या .pig_schema फ़ाइलों को नहीं बनाता है। मैंने पिगस्टोरेज और पिगस्टोरेजशेमा का उपयोग करने की कोशिश की है। मैं सुअर 0.10.0 चला रहा हूँ। – Saxivore

+0

हाय दोस्त, इसके आगे ... .pig_header फ़ाइल _is_ बनाया गया लेकिन यह छिपा हुआ था और मैं इसे नहीं देख सका (मैं अभी भी खोल सामग्री के साथ काम करने के लिए उपयोग कर रहा हूं)। तो, मेरे पास एक वर्कअराउंड है जो स्क्रिप्ट के भीतर किया जा सकता है जो कि कमाल है। धन्यवाद! – Saxivore

+0

@ सैक्सिवोर 'pig_object. की स्कीमा की जांच करें। यदि कोई नहीं है तो कोई हेडर और स्कीमा फाइल नहीं बनाई जाएगी। क्या आपको इस प्रश्न के साथ और मदद चाहिए? –

1

:

STORE pig_object INTO '/user/hadoop/csvoutput/pig_object' 
    using PigStorage('\t','-schema'); 
fs -getmerge -nl /user/hadoop/csvoutput/pig_object /Users/Name/Folder/pig_object.csv; 

Docs:

वैकल्पिक रूप से -nl को प्रत्येक फ़ाइल के अंत पर एक न्यूलाइन वर्ण (एलएफ) जोड़ने में सक्षम करने के लिए सेट किया जा सकता है।

आप एक ही TSV/सीएसवी निम्नलिखित संरचना के साथ फाइल करना होगा:

1 - header 
2 - empty line 
3 - pig schema 
4 - empty line 
5 - 1st line of DATA 
6 - 2nd line of DATA 
... 

तो हम बस लाइनों [2,3,4] AWK का उपयोग कर निकाल सकते हैं: आपकी सहायता के लिए बहुत-बहुत

awk 'NR==1 || NR>4 {print}' /Users/Name/Folder/pig_object.csv > /Users/Name/Folder/pig_object_clean.csv 
संबंधित मुद्दे