2015-07-20 3 views
1

я написал программу Spark, которая принимает в некоторых входных сигналов, делает различные вещи, чтобы данные, и в конце моей обработки у меня естьReading сохранен текстовый файл из программы Спарк в другой один

val processedData = ... 

processedData имеет тип RDD [(Key, List [Data])], где Key и Data - это классы case, которые я определил.

Я тогда назвал

processedData.saveAsTextFile(location) 

В этом месте находится папка с файлом успеха и 54 частей файлов, которые я ожидал увидеть.

Теперь, в другой программе, я только начал писать, чтобы сделать некоторые статистический анализ на моем выходе, я начинаю с:

val groupedData = sc.textFile(location).cache() 

Однако мой IDE (по праву), считает, что groupedData имеет тип RDD [String ]

Что такое идиоматический способ сообщить компилятору/IDE, что groupedData имеет тип RDD [(Key, List [Data])]?

ответ

4

Воспроизведение:

scala> sc.parallelize(List(1,2,3).zip(List("abc","def","ghi"))) 
res0: org.apache.spark.rdd.RDD[(Int, String)] = ParallelCollectionRDD[0] at parallelize at <console>:22 

scala> res0.collect 
res1: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi)) 

scala> res0.saveAsTextFile("file") 

scala> sc.textFile("file") 
res3: org.apache.spark.rdd.RDD[String] = file MapPartitionsRDD[3] at textFile at <console>:22 

scala> res3.collect 
res4: Array[String] = Array((1,abc), (2,def), (3,ghi)) 

Результат просто строка в представлении метода ToString. Документация:

Защиту saveAsTextFile (путь: String): Unit

Сохранить РДД в виде текстового файла, строковые представления элементов.

Как решить:

scala> res0.saveAsObjectFile("file1") 

scala> sc.objectFile[(Int,String)]("file1") 
res9: org.apache.spark.rdd.RDD[(Int, String)] = MapPartitionsRDD[11] at objectFile at <console>:22 

scala> res9.collect 
res10: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi)) 

Документация:

Защиту saveAsObjectFile (путь: String): Unit

Сохранить РДД как сериализованных объектов.

Примечание: при чтении из файла необходимо указать параметр типа. Это необходимо для десериализации. Искра хочет знать, что можно отступить.

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