我正在尝试弄清楚如何将编解码器传递给 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
<: 是什么意思?我知道编解码器是可选的,因为当我运行上面的代码时它可以工作。有人可以展示一个格式正确的编解码器调用此方法的示例吗?
谢谢!
最佳答案
<:
表示你传入的类应该扩展 org.apache.hadoop.io.compress.CompressionCodec
(阅读 this ),spark 使用了很多 HDFS 功能,并且在这一点上与其高度集成。这意味着您可以将以下任何类作为编解码器传递,BZip2Codec, DefaultCodec, GzipCodec
,CompressionCodec
可能还有其他扩展名没有内置到 hadoop 中。下面是调用方法的例子
sc.parallelize(List((1,2))).saveAsSequenceFile("path",Some(classOf[GzipCodec]))
Option[...]
在 scala 中使用有利于 java 的 null
尽管null
存在于scala中。 Option
可以是Some(...)
或 None
关于java - 如何为 Spark 中的 SaveAsSequenceFile 方法提供编解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554625/