我正在运行一项火花作业,其性能就逻辑而言非常出色。但是,当我使用SaveAsTextFile将文件保存在S3存储桶中时,我的输出文件的名称为格式part-00000,part-00001等。有没有办法更改输出文件名?
谢谢。
在Spark中,您可以使用 saveasnewapihadoopfile 和set mapReduce.output.output.basename paramece parameter in hadoop配置中的prepfix(只有" part"前缀)
val hadoopConf = new Configuration()
hadoopConf.set("mapreduce.output.basename", "yourPrefix")
yourRDD.map(str => (null, str))
.saveAsNewAPIHadoopFile(s"$outputPath/$dirName", classOf[NullWritable], classOf[String],
classOf[TextOutputFormat[NullWritable, String]], hadoopConf)
您的文件将被命名为: yourprefix-r-00001
在Hadoop和Spark中,您可以在输出中拥有多个文件,因为您可以拥有多个还原器(Hadoop)或一个以上的分区(Spark)。然后,您需要为每个人保修独特的名称,这就是为什么不可能在文件名的最后部分覆盖序列号。
但是,如果您想对文件名进行更多控制,则可以扩展 textOutputformat 或 fileOutputputformat 并覆盖 getuniquefile 方法。方法。
[java中的解决方案]
可以说您有:
JavaRDD<Text> rows;
您想将其写入customPrefix-r-00000
。
Configuration hadoopConf = new Configuration();
hadoopConf.set("mapreduce.output.basename", "customPrefix");
rows.mapToPair(row -> new Tuple2(null, row)).saveAsNewAPIHadoopFile(outputPath, NullWritable.class, Text.class, TextOutputFormat.class, hadoopConf);
tada !!