spark输出文件名并在写入时附加

6vl6ewon  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(526)

我知道这个问题以前有人问过,但我无法得到一个明确的工作答案。

result.saveAsTextFile(path);

使用spark saveastextfile时,输出以“part-00”、“part-01”等名称保存。是否可以将此名称更改为自定义名称?
saveastextfile是否可以附加到现有文件,而不是覆盖它?
我使用Java7进行编码,输出文件系统将是cloud(azure,aws)

r8xiu3jd

r8xiu3jd1#

1) saveastextfile方法不直接支持控制文件输出名称。您可以尝试使用saveashadoopdataset来控制输出文件basename。
e、 g:您可以获得CustomName-00000,而不是part-00000。
请记住,不能使用此方法控制后缀00000。它是spark在写入时自动为每个分区分配的,以便每个分区写入一个唯一的文件。
为了像上面在注解中提到的那样控制这种情况,您必须编写自己的自定义outputformat。

SparkConf conf=new SparkConf();
conf.setMaster("local").setAppName("yello");
JavaSparkContext sc=new JavaSparkContext(conf);

JobConf jobConf=new JobConf();
jobConf.set("mapreduce.output.basename", "customName");
jobConf.set("mapred.output.dir", "outputPath");

JavaRDD<String> input = sc.textFile("inputDir");
input.saveAsHadoopDataset(jobConf);

2) 解决方法是将输出原样写入输出位置,并使用hadoop fileutil.copymerge函数形成合并文件。

相关问题