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

Outputting a Scalding TypedPipe to a SequenceFile in multiple directories based on one of the fields

我在 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,避免循环?

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