如何为Spark中的SaveAsSequenceFile方法提供编解码器?

时间:2014-07-03 13:11:00

标签: java scala hadoop apache-spark

我试图弄清楚如何将编解码器传递给Apache Spark中的saveAsSequenceFile方法。下面是我试图运行的代码。我正在运行Scala 2.10.4,Spark 1.0.0,Java 1.7.60和Apache Hadoop 2.4.0。

val rdd:RDD[(String, String)] = sc.sequenceFile(secPath,
                                classOf[Text],
                                classOf[Text]
                               ).map { case (k,v) => (k.toString, v.toString)}

val sortedOutput = rdd.sortByKey(true, 1)

sortedOutput.saveAsSequenceFile(secPathOut)

我的问题是我是Spark和Scala的新手。我不明白javadoc对传递给saveAsSequenceFile方法的编解码器变量意味着什么。

def saveAsSequenceFile(path: String, codec: Option[Class[_ <: CompressionCodec]] = None): Unit 

&lt ;:是什么意思?我知道编解码器是可选的,因为当我运行上面的代码时,它是有效的。有人可以展示一个正确格式化编解码器调用这个方法的例子吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

<:表示您传入的类应该扩展org.apache.hadoop.io.compress.CompressionCodec(读取this),spark使用了大量HDFS功能,并且此时与其进行了大量集成。这意味着您可以将以下任何一个类作为编解码器BZip2Codec, DefaultCodec, GzipCodec传递,也可能还有其他CompressionCodec的扩展未构建到hadoop中。以下是调用方法

的示例
sc.parallelize(List((1,2))).saveAsSequenceFile("path",Some(classOf[GzipCodec]))

尽管scala中存在Option[...],但在scala中使用null支持java nullOption可以是Some(...)None