Вывод Scalding TypedPipe в SequenceFile в нескольких каталогах на основе одного из полей

Я использую Scalding в Hadoop, у меня есть большой набор данных в форме TypedPipe, который я хочу выводить порциями на основе одного из полей данных.

Например, данные <category, field1, field2>и я хочу, чтобы данные для каждой категории сохранялись в SequenceFile в отдельной категории, например outPath/cat1, outPath/cat2 и т.д. И я хочу одну фазу MapReduce (или избегать циклов).

Я читал о TemplatedTsv вариант здесь: Как объединить выводы в Scalding

И здесь: Как вывести данные с помощью структуры каталогов в стиле Hive в 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 ответ

Решение

Существует com.twitter.scalding.TemplatedSequenceFile, который может делать то, что вам нужно. Это выглядит как TemplateTsv, но с выводом в SequenceFile

Другие вопросы по тегам