我在Hadoop上使用Scalding,我有一个TypedPipe形式的大型数据集,我希望根据其中一个数据字段以块的形式输出。
例如,数据是<category, field1, field2>
,我希望将SequenceFile中存储的每个类别的数据放在一个单独的类别中,例如outPath/cat1
,outPath/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,避免循环?
答案 0 :(得分:1)
有com.twitter.scalding.TemplatedSequenceFile可以做你需要的。它看起来就像TemplateTsv,但输出到SequenceFile