我有一个rdd如下:
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
,我可以用文本格式。然而,这个rdd包含大量复杂的数据。以压缩格式保存可能更好,比如 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)
}
}
1条答案
按热度按时间soat7uwm1#
你用的是什么版本的spark?
你试过类似的东西吗
或者
?