我正在使用spark应用程序。在rdd的每个元素中包含大量数据。我想分别将rdd的每个元素保存到多个hdfs文件中。我试过rdd.saveAsTextFile("foo.txt")
但我会为整个rdd
创建一个文件。 rdd
大小为10.我想要hdfs
中的10个文件。我怎么能实现这个?
答案 0 :(得分:0)
如果我理解您的问题,则可以创建这样的自定义输出格式
class RDDMultipleTextOutputFormat 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[String]
}
然后将RDD转换为一个密钥/值,其中密钥为文件路径,您可以使用由saveAsTextFile插入的saveAsHadoopFile函数,如下所示:
myRDD.saveAsHadoopFile(OUTPUT_PATH, classOf[String], classOf[String],classOf[RDDMultipleTextOutputFormat])