2015-09-14 2 views
0

Я использую следующий код для экспорта DataFrame:Как объединить два текстовых файла и преобразовать его в формат CSV-файла в Scala

df.select("A", "b", "C", "D","E") 
    .write.format("com.databricks.spark.csv") 
    .save("newiris.csv") 

я получаю два текстовых файла следующим образом:

часть-00000

5.1,3.5,1.4,0.2,Iris-setosa 
4.9,3,1.4,0.2,Iris-setosa 
4.7,3.2,1.3,0.2,Iris-setosa 
4.6,3.1,1.5,0.2,Iris-setosa 
5,3.6,1.4,0.2,Iris-setosa 
5.4,3.9,1.7,0.4,Iris-setosa 

часть-00001

6.7,3,5,1.7,Iris-versicolor 
6,2.9,4.5,1.5,Iris-versicolor 
5.7,2.6,3.5,1,Iris-versicolor 
5.5,2.4,3.8,1.1,Iris-versicolor 
5.5,2.4,3.7,1,Iris-versicolor 
5.8,2.7,3.9,1.2,Iris-versicolor 

Теперь я хочу, чтобы они объединены в один файл, как

5.1,3.5,1.4,0.2,Iris-setosa 
4.9,3,1.4,0.2,Iris-setosa 
4.7,3.2,1.3,0.2,Iris-setosa 
4.6,3.1,1.5,0.2,Iris-setosa 
5,3.6,1.4,0.2,Iris-setosa 
5.4,3.9,1.7,0.4,Iris-setosa 
6.7,3,5,1.7,Iris-versicolor 
6,2.9,4.5,1.5,Iris-versicolor 
5.7,2.6,3.5,1,Iris-versicolor 
5.5,2.4,3.8,1.1,Iris-versicolor 
5.5,2.4,3.7,1,Iris-versicolor 
5.8,2.7,3.9,1.2,Iris-versicolor 

А затем преобразовать его в формат CSV. Как я могу это сделать в Scala?

ответ

1

Необходимый Scala биты здесь scala.io.Source прочитать файл и получить строки, ++ добавлять part0-00000 и part-00001, и foreach цикла, чтобы пройти через объединенные данные и запись в файл. Файловый ввод-вывод такой же, как в Java.

scala> import java.io._ 

scala> import scala.io.Source 

scala> val part0 = Source.fromFile("part-00000.txt").getLines 
part0: Iterator[String] = non-empty iterator 

scala> val part1 = Source.fromFile("part-00001.txt").getLines 
part1: Iterator[String] = non-empty iterator 

scala> val part2 = part0.toList ++ part1.toList 
part2: List[String] = List(5.1,3.5,1.4,0.2,Iris-setosa, 4.9,3,1.4,0.2,Iris-setosa, 4.7,3.2,1.3,0.2,Iris-setosa, 4.6,3.1,1.5,0.2,Iris-setosa, 5,3.6,1.4,0.2,Iris-setosa, 5.4,3.9,1.7,0.4,Iris-setosa, 6.7,3,5,1.7,Iris-versicolor, 6,2.9,4.5,1.5,Iris-versicolor, 5.7,2.6,3.5,1,Iris-versicolor, 5.5,2.4,3.8,1.1,Iris-versicolor, 5.5,2.4,3.7,1,Iris-versicolor, 5.8,2.7,3.9,1.2,Iris-versicolor) 

scala> val part00002 = new File("part-00002") 
part00002: java.io.File = part-00002 

scala> val bw = new BufferedWriter(new FileWriter(part00002)) 
bw: java.io.BufferedWriter = [email protected] 

scala> part2.foreach(p => bw.write(p + "\n")) 


scala> bw.close 

Проверьте файл:

brian:/tmp/ $ cat part-00002                
5.1,3.5,1.4,0.2,Iris-setosa 
4.9,3,1.4,0.2,Iris-setosa 
4.7,3.2,1.3,0.2,Iris-setosa 
4.6,3.1,1.5,0.2,Iris-setosa 
5,3.6,1.4,0.2,Iris-setosa 
5.4,3.9,1.7,0.4,Iris-setosa 
6.7,3,5,1.7,Iris-versicolor 
6,2.9,4.5,1.5,Iris-versicolor 
5.7,2.6,3.5,1,Iris-versicolor 
5.5,2.4,3.8,1.1,Iris-versicolor 
5.5,2.4,3.7,1,Iris-versicolor 
5.8,2.7,3.9,1.2,Iris-versicolor 
+0

Большое спасибо! Когда я делаю val part00002 = новый файл («part-00002»), я получил ошибку, не найденную: type File. мне нужно определить файл или импортировать что-нибудь? – Tong

+0

'import java.io._' должен это сделать. – Brian

+0

Спасибо! Он работает отлично. Еще один вопрос: будет ли эта операция проще, если part-00000 и part-00001 в формате csv? – Tong

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