我在下面有一个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)
}
}
答案 0 :(得分:0)
您使用的是哪个版本的Spark?
您尝试过类似的事情
.repartition(3).saveAsTextFile("/path/to/output", classOf[GzipCodec])
或
sc.hadoopConfiguration.setClass(FileOutputFormat.COMPRESS_CODEC, classOf[GzipCodec], classOf[CompressionCodec])
?