在Spark中保存文件

时间:2015-12-23 05:38:21

标签: scala hadoop apache-spark

要保存的RDD有两个操作。一个是saveAsTextFile,另一个是saveAsObjectFile。我理解saveAsTextFile,但不理解saveAsObjectFile。我是Spark和scala的新手,因此我对saveAsObjectFile感到好奇。

1)它是来自Hadoop的序列文件还是有些不同的东西?

2)我可以使用Map Reduce读取使用saveAsObjectFile生成的文件吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:3)

  1. saveAsTextFile() - 将RDD保留为压缩文本文件,使用 元素的字符串表示。它利用了Hadoop的 TextOutputFormat 。为了提供压缩,我们可以使用重载方法接受第二个参数为 CompressionCodec 。请参阅RDD API
  2. saveAsObjectFile() - 将RDD的对象保留为序列化对象的SequenceFile。
  3. 现在,在阅读序列文件时,您可以使用 SparkContext.objectFile(“文件路径”),内部利用Hadoop的 SequenceFileInputFormat 来读取文件。

    或者您也可以使用 SparkContext.newAPIHadoopFile(...),它接受Hadoop的InputFormat和path作为参数。

答案 1 :(得分:1)

rdd.saveAsObjectFile将RDD保存为序列文件。要读取这些文件,请使用sparkContext.objectFile(" fileName")