#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