有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在试图弄清楚如何在ApacheSpark中将编解码器传递给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方法的codec变量意味着什么

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

什么是<;:意思是我知道编解码器是可选的,因为当我运行上面的代码时,它可以工作。有人能举一个对这个方法进行正确格式化的编解码器调用的例子吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    <:表示您传入的类应该扩展^{}(读this),spark使用了很多HDFS特性,并且在这一点上与它进行了大量集成。这意味着您可以将以下任何一个类作为编解码器传递BZip2Codec, DefaultCodec, GzipCodec,可能还有CompressionCodec的其他扩展没有内置到hadoop中。下面是一个调用该方法的示例

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

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