在火花流中更改输出文件名



我正在运行一项火花作业,其性能就逻辑而言非常出色。但是,当我使用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 !!

相关内容

  • 没有找到相关文章

最新更新