2015-12-23 117 views
0

RDD上有兩個操作要保存。一個是saveAsTextFile,另一個是saveAsObjectFile。我瞭解saveAsTextFile,但不懂saveAsObjectFile。我是Spark和Scala的新手,因此我對saveAsObjectFile很好奇。它是來自Hadoop的序列文件還是不同的東西?將文件保存在Spark中

我可以讀取使用Map Reduce使用saveAsObjectFile生成的文件嗎?如果是,如何?

回答

3
  1. saveAsTextFile() - 堅持的RDD爲壓縮文本文件,使用元素的 字符串表示。它利用Hadoop的TextOutputFormat。爲了提供壓縮,我們可以使用接受第二個參數的重載方法,如CompressionCodec。參考RDD API
  2. saveAsObjectFile() - 將RDD的Object持久化爲序列化對象的SequenceFile。

現在在讀取序列文件,你可以使用SparkContext.objectFile(「文件的路徑」)其內部利用Hadoop的SequenceFileInputFormat來讀取文件。

或者,您也可以使用SparkContext.newAPIHadoopFile(...)它接受Hadoop的InputFormat和路徑作爲參數。

+0

我已經運行saveAsTextFile(),但它沒有以壓縮格式保存。需要做些什麼來壓縮它? –

+0

修改了我的答案,並添加了saveAsTextFile()函數的更多詳細信息。 – Sumit

0

rdd.saveAsObjectFile將RDD保存爲序列文件。閱讀這些文件使用sparkContext.objectFile( 「文件名」)

+0

如何使用傳統地圖縮小來讀取它?通過說setInputFormat(SequenceFileInputFormat)與序列文件相同還是需要添加進一步的自定義? –

+1

我有一個RDD [字符串],我通過sparkContext.textFile(「fileName」);然後我通過sparkContext.saveAsObjectFile(「abcTest」)將它保存爲目標文件;然後我試圖通過.objectFile(「abcTest」)讀回來,但結果類型是org.apache.spark.rdd.RDD [Nothing];當然,我無法檢查文件的內容。我做錯了什麼? –