1

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

例如,数据是<category, field1, field2>,我希望将每个类别的数据存储在一个单独的类别中的 SequenceFile 中,例如outPath/cat1outPath/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,避免循环?

4

1 回答 1

1

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

于 2015-05-11T00:54:25.563 回答