我试图弄清楚如何将编解码器传递给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 ;:是什么意思?我知道编解码器是可选的,因为当我运行上面的代码时,它是有效的。有人可以展示一个正确格式化编解码器调用这个方法的例子吗?
谢谢!
答案 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 null
。 Option
可以是Some(...)
或None