在文本文件hdfs

时间:2017-10-11 07:42:07

标签: apache-spark hdfs rdd

我正在使用spark应用程序。在rdd的每个元素中包含大量数据。我想分别将rdd的每个元素保存到多个hdfs文件中。我试过rdd.saveAsTextFile("foo.txt")但我会为整个rdd创建一个文件。 rdd大小为10.我想要hdfs中的10个文件。我怎么能实现这个?

1 个答案:

答案 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])