2015-04-28 22 views
5

में किसी पाठ फ़ाइल में एक नई लाइन जोड़े मैं आदेशस्पार्क

val data = sc.textFile("/path/to/my/file/part-0000[0-4]") 

का उपयोग कर मैं अपनी फ़ाइल के हेडर के रूप में एक नई लाइन जोड़ना चाहते हैं स्पार्क में एक पाठ फ़ाइल पढ़ा है। आरडीडी को एक ऐरे में घुमाने के बिना ऐसा करने का कोई तरीका है?

धन्यवाद!

+1

'वैल हेडर = sc.parallize (सूची (" \ n ")) के साथ नया Rdd बनाएं और बस इन दो Rdd के साथ 'हेडर ++ डेटा' जोड़ें। लेकिन यह समझ में नहीं आता है, आपको इसकी आवश्यकता क्यों है? – ipoteka

+0

मुझे खेद है, नई लाइन के साथ मेरा मतलब कुछ स्तंभों के नाम से एक रेखा थी। मेरी गलती। वैसे भी वही है जो मुझे चाहिए, धन्यवाद! – amarchin

+0

मैं आपको डेटाफ्रेम देखने के लिए दृढ़ता से अनुशंसा करता हूं। बस, डेटाफ्रेम स्कीमा और प्रकारों के बारे में कुछ मेटा-जानकारी के साथ बस अजीब है। और रखें और ध्यान रखें कि 'हेडर ++ डेटा' बड़े Rdds के लिए आदेश जारी नहीं रहेगा। – ipoteka

उत्तर

-2

आरडीडी अपरिवर्तनीय हैं। इसका मतलब है कि आप एक बार बनाए गए आरडीडी की सामग्री को बदलने में सक्षम नहीं होंगे। आप आरडीडी रूपांतरणों का उपयोग करके आधार आरडीडी से नया आरडीडी बना सकते हैं।

+1

ओपी को बिना किसी प्रस्ताव के यह वास्तव में एक जवाब नहीं है कि वह उन परिवर्तनों का उपयोग कैसे करें जो वह चाहते हैं। यह एक टिप्पणी होना चाहिए –

1

आप वास्तव में नियंत्रित नहीं कर सकते कि क्या नई लाइन पहली (हेडर) या नहीं होगा, लेकिन आप नए सिंगलटन RDD बना सकते हैं और बराबर के साथ मर्ज कर सकते हैं:

val extendedData = data ++ sc.makeRDD(Seq("my precious new line")) 

तो

extendedData.filter(_ startsWith "my precious").first() 

होगा शायद साबित करें कि आपकी लाइन

+0

आप वास्तव में नियंत्रित कर सकते हैं कि नई लाइन पहले होगी या नहीं। आपके उदाहरण में यह आखिरी रहेगा क्योंकि आपने इसे मूल आरडीडी के बाद रखा था। और आपका क्या मतलब है "शायद"? और आप फाइलों के बारे में भी बात नहीं करते हैं। –

2

"पार्ट" फ़ाइलों को स्वचालित रूप से फ़ाइल सेट के रूप में संभाला जाता है।

val data = sc.textFile("/path/to/my/file") // Will read all parts. 

बस शीर्ष लेख और इसे बाहर लिखें:

val header = sc.parallelize(Seq("...header...")) 
val withHeader = header ++ data 
withHeader.saveAsTextFile("/path/to/my/modified-file") 

ध्यान दें कि यह पढ़ सकते हैं और सभी डेटा लिखने के लिए नहीं है, क्योंकि, इससे आप अपने सहज अपेक्षा कर सकते हैं की तुलना में काफ़ी धीमी हो जाएगा। (आखिरकार आप केवल एक नई लाइन जोड़ रहे हैं!) इस कारण और दूसरों के लिए, आप इस हेडर को जोड़ने से बेहतर नहीं हो सकते हैं, और डेटा से अलग मेटाडेटा (कॉलम की सूची) को स्टोर करने के बजाय बेहतर हो सकते हैं।