2015-02-03 2 views
8

У меня есть RDD, которое имеет формуДать RDD в CSV

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

Я хочу, чтобы написать этот код в файл CSV. Пожалуйста, предложите мне, как это можно сделать.

Выполнение myrdd.saveAsTextFile on дает результат, как показано ниже.

(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 [(String, (Array [String], Option [Array [String]]))]. Кажется, что он не работает над частью Option, его все еще печатает объект –

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

упражнение для чтения: write toCsv, так что весь раздел за один раз использует '' 'mapPartition''' –

Смежные вопросы