Вывод 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