我在 Hadoop 上使用 Scalding,我有一个 TypedPipe 形式的大型数据集,我希望根据其中一个数据字段分块输出。
例如,数据是<category, field1, field2>
,我希望将每个类别的数据存储在一个单独的类别中的 SequenceFile 中,例如outPath/cat1
,outPath/cat2
等等。我想要一个 MapReduce 阶段(或避免循环)。
我在TemplatedTsv
这里阅读了有关该选项的信息:
如何在 Scalding 中存储输出
在这里: 如何在 Scalding 中使用 Hive 样式的目录结构输出数据?
但是,这仅在您需要 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,避免循环?