基于其中一个字段将Scalding TypedPipe输出到多个目录中的SequenceFile

时间:2015-05-10 10:08:07

标签: hadoop cascading scalding sequencefile

我在Hadoop上使用Scalding,我有一个TypedPipe形式的大型数据集,我希望根据其中一个数据字段以块的形式输出。

例如,数据是<category, field1, field2>,我希望将SequenceFile中存储的每个类别的数据放在一个单独的类别中,例如outPath/cat1outPath/cat2等。我想要一个MapReduce阶段(或避免循环)。

我在这里阅读了TemplatedTsv选项: How to bucket outputs in Scalding

在这里: How to output data with Hive-style directory structure in Scalding?

但是,只有在需要Tsv文件而不是SequenceFile时,这才有效。

显然循环有效:

var category = 0L

for (category <- categories) {
    data
    .filter(_.category == category)
    .map(t => (NullWritable.get, new BytesWritable(SerializationUtils.serialize(t))))
    .write(WritableSequenceFile(outPath + "/" + category))
}

那么是否有一种与TemplateTsv等效的方法可以编写一个SequenceFile,避免循环?

1 个答案:

答案 0 :(得分:1)

com.twitter.scalding.TemplatedSequenceFile可以做你需要的。它看起来就像TemplateTsv,但输出到SequenceFile