我正在运行一个Spark工作,就逻辑而言,它的表现非常好。但是,当我使用saveAsTextFile将文件保存在s3存储桶中时,输出文件的名称格式为part-00000,part-00001等。有没有办法改变输出文件名?
谢谢。
答案 0 :(得分:4)
在Spark中,您可以使用 saveAsNewAPIHadoopFile 并在hadoop配置中设置 mapreduce.output.basename 参数来更改前缀(仅限"部分"前缀)
valid?: false
您的文件将命名为: yourPrefix-r-00001
在hadoop和Spark中,您可以在输出中包含多个文件,因为您可以拥有多个reducer(hadoop)或多个分区(spark)。然后,您需要为每个名称保证唯一的名称,这就是为什么不能覆盖文件名最后部分的序列号。
但是,如果您希望更好地控制文件名,可以扩展 TextOutputFormat 或 FileOutputFormat 并覆盖 getUniqueFile 方法。
答案 1 :(得分:0)
[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);
多田!!