2015-07-20 25 views
1

我寫了星火計劃,發生在一些輸入,進行各種各樣的事情的數據,並在我的處理結束時,我有一個閱讀保存的文本文件,從星火計劃到另一個

val processedData = ... 

processedData是RDD [(Key,List [Data])]類型,其中Key和Data是我定義的大小寫類。

我當時叫

processedData.saveAsTextFile(location) 

在該位置是一個成功的文件和54個文件,這是我希望看到的文件夾。現在

,在另一個節目,我剛開始寫作做了一些統計分析,在我的輸出,我開始:

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

然而,我的IDE(理所當然),認爲groupedData的類型RDD [字符串]

告訴編譯器/ IDE分組數據是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(路徑:字符串):單位

保存此RDD爲文本文件,內容的字符串表示。

如何解決:

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(路徑:字符串):單位

保存此RDD作爲序列化對象。

請注意,從文件讀取時必須指定類型參數。有必要反序列化。 Spark希望知道要檢索的內容。

相關問題