2015-02-03 6 views
8

करने के लिए एक RDD लेखन मैं एक RDD रूपएक csv

org.apache.spark.rdd.RDD[(String, Array[String])] 

मैं एक csv फ़ाइल में इस लिखना चाहते हैं की है जो की है। कृपया मुझे सुझाव दें कि यह कैसे किया जा सकता है।

myrdd.saveAsTextFile करना नीचे आउटपुट देता है।

(875,[Ljava.lang.String;@53620618) 
(875,[Ljava.lang.String;@487e3c6c) 

उत्तर

9

आप कोशिश कर सकते हैं:

myrdd.map(a => a._1 + "," + a._2.mkString(",")).saveAsTextFile 
+0

@Szymon ... धन्यवाद यह काम करता है !! आउटपुट में शुरुआत और अंत में ब्रैकेट होते हैं। क्या उन लोगों की छड़ी प्राप्त करना संभव नहीं है? –

+0

संभव, मैंने प्रतिक्रिया बदल दी। – Szymon

+0

@Szymon ... क्या यह समाधान काम करेगा यदि मेरा डेटा प्रकार org.apache.spark.rdd.RDD में बदल जाता है [(स्ट्रिंग, (ऐरे [स्ट्रिंग], विकल्प [ऐरे [स्ट्रिंग]]))]। ऐसा लगता है कि विकल्प भाग पर काम नहीं करना है, फिर भी यह ऑब्जेक्ट –

6

अन्य जवाब से बचने के लिए पूरा नहीं करता। शायद यह अधिक सामान्य समाधान?

import au.com.bytecode.opencsv.CSVWriter 
import java.io.StringWriter 
import scala.collection.JavaConversions._ 
val toCsv = (a: Array[String]) => { 
    val buf = new StringWriter 
    val writer = new CSVWriter(buf) 
    writer.writeAll(List(a)) 
    buf.toString.trim 
} 
rdd.map(t => Array(t._1) ++ t._2) 
    .map(a => toCsv(a)) 
    .saveAsTextFile(dest) 
+0

पाठक के लिए अभ्यास: सीएसवी को लिखें ताकि यह पूरे विभाजन को '' 'mapPartition''' का उपयोग करके जा सके। –

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