在 Spark Streaming 中更改输出文件名
Change output file name in Spark Streaming
我是 运行 一个 Spark 作业,就逻辑而言,它的表现非常出色。但是,当我使用 saveAsTextFile 将文件保存在 s3 存储桶中时,我的输出文件的名称格式为 part-00000、part-00001 等。有没有办法更改输出文件名?
谢谢。
在 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 方法。
[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);
多田!!
我是 运行 一个 Spark 作业,就逻辑而言,它的表现非常出色。但是,当我使用 saveAsTextFile 将文件保存在 s3 存储桶中时,我的输出文件的名称格式为 part-00000、part-00001 等。有没有办法更改输出文件名?
谢谢。
在 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 方法。
[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);
多田!!