压缩输出烫伤/级联TsvCompressed

时间:2014-05-29 17:42:15

标签: scala hadoop compression cascading scalding

所以人们在压缩Scalding Jobs(包括我自己)的输出时遇到了问题。谷歌搜索后,我在一个不起眼的论坛上得到了一个奇怪的答案,但没有什么适合人们的复制和粘贴需求。

我想要一个像Tsv这样的输出,但写出压缩输出。

2 个答案:

答案 0 :(得分:3)

无论如何,经过多次努力,我设法编写了一个TsvCompressed输出,它似乎完成了这项工作(你仍然需要设置hadoop作业系统配置属性,即将compress设置为true,并将编解码器设置为合理的或默认为蹩脚的放气)

import com.twitter.scalding._
import cascading.tuple.Fields
import cascading.scheme.local
import cascading.scheme.hadoop.{TextLine, TextDelimited}
import cascading.scheme.Scheme
import org.apache.hadoop.mapred.{OutputCollector, RecordReader, JobConf}

case class TsvCompressed(p: String) extends FixedPathSource(p) with DelimitedSchemeCompressed

trait DelimitedSchemeCompressed extends Source {
  val types: Array[Class[_]] = null

  override def localScheme = new local.TextDelimited(Fields.ALL, false, false, "\t", types)

  override def hdfsScheme = {
    val temp = new TextDelimited(Fields.ALL, false, false, "\t", types)
    temp.setSinkCompression(TextLine.Compress.ENABLE)
    temp.asInstanceOf[Scheme[JobConf,RecordReader[_,_],OutputCollector[_,_],_,_]]
  }
}

答案 1 :(得分:1)

我还有一个小项目,展示如何从Tsv获得压缩输出。 WordCount-Compressed

Scalding正在将null设置为级联TextDelimeted参数,该参数会禁用压缩。