在Spark Streaming中更改输出文件名

时间:2016-06-22 15:27:22

标签: hadoop apache-spark spark-streaming spark-dataframe

我正在运行一个Spark工作,就逻辑而言,它的表现非常好。但是,当我使用saveAsTextFile将文件保存在s3存储桶中时,输出文件的名称格式为part-00000,part-00001等。有没有办法改变输出文件名?

谢谢。

2 个答案:

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

多田!!