我正在运行一个Spark的工作,执行非常好的逻辑去。但是,当我使用saveastextfile将文件保存在s3 bucket中时,输出文件的名称的格式是part-00000、part-00001等。有没有办法更改输出文件名?谢谢您。
wfypjpf41#
[java解决方案]假设你有:
JavaRDD<Text> rows;
你想把它写进像 customPrefix-r-00000 .
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);
塔达!!
pengsaosao2#
在spark中,可以使用saveasnewapihadoopfile并在hadoop配置中设置mapreduce.output.basename参数来更改前缀(只是“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中,输出中可以有多个文件,因为可以有多个reducer(hadoop)或多个分区(spark)。然后您需要保证每个文件名都是唯一的,这就是为什么不可能覆盖文件名最后一部分的序列号的原因。但是,如果您想对文件名有更多的控制,可以扩展textoutputformat或fileoutputformat并重写getuniquefile方法。
2条答案
按热度按时间wfypjpf41#
[java解决方案]
假设你有:
你想把它写进像
customPrefix-r-00000
.塔达!!
pengsaosao2#
在spark中,可以使用saveasnewapihadoopfile并在hadoop配置中设置mapreduce.output.basename参数来更改前缀(只是“part”前缀)
您的文件将命名为:yourprefix-r-00001
在hadoop和spark中,输出中可以有多个文件,因为可以有多个reducer(hadoop)或多个分区(spark)。然后您需要保证每个文件名都是唯一的,这就是为什么不可能覆盖文件名最后一部分的序列号的原因。
但是,如果您想对文件名有更多的控制,可以扩展textoutputformat或fileoutputformat并重写getuniquefile方法。