Как предоставить кодек методу SaveAsSequenceFile в Spark?

#java #scala #hadoop #apache-spark

#java #scala #hadoop #apache-spark

Вопрос:

Я пытаюсь выяснить, как передать кодек методу saveAsSequenceFile в Apache Spark. Ниже приведен код, который я пытаюсь запустить. Я использую 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 для переменной codec, переданной методу saveAsSequenceFile.

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

Что означает <:? Я понимаю, что кодек необязателен, потому что, когда я запускаю приведенный выше код, он работает. Не мог бы кто-нибудь, пожалуйста, показать пример правильно отформатированного вызова кодека для этого метода?

Спасибо!

Ответ №1:

<: Указывает, что класс, который вы передаете, должен расширяться org.apache.hadoop.io.compress.CompressionCodec (прочитайте это), 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