У меня есть СДР ниже:
Array(
(0, "xx"),
(1, "xx"),
(2, "xx"),
(1, "yy")
)
Я хочу сохранить его в разных каталогах по ключу.Например, чтобы создать 3 файла в этих каталогах:
0/part-00000 // xx
1/part-00000 // xx and yy
2/part-00000 // xx
Через saveAsHadoopFile
и MultipleTextOutputFormat
, я могу сделать это в текстовом формате .Однако этот СДР содержит огромные сложные данные.Сохранение в сжатом формате может быть лучше, чем то, что делает saveAsObjectFile
.
MultipleSequenceFileOutputFormat
может помочь мне понять это, но как правильно его использовать?
РЕДАКТИРОВАТЬ:
Я пытался сделать это в текстовом формате:
.saveAsHadoopFile(outputPath, classOf[Any], classOf[Any], classOf[MultiOutputFormat])
class MultiOutputFormat() extends MultipleTextOutputFormat[Any, Any] {
override def generateActualKey(key: Any, value: Any): Any = {
NullWritable.get()
}
override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = {
key.asInstanceOf[Int] + "/" + super.generateFileNameForKeyValue(key, value, name)
}
}