回放:
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希望知道要檢索的內容。