我知道之前已经问过这个问题,但我无法得到明确的工作答案。
result.saveAsTextFile(path);
使用spark saveAsTextFile时,输出的名称为" part-00"," part-01"等等 是否可以将此名称更改为自定义名称?
saveAsTextFile是否可以附加到现有文件而不是覆盖它?
我使用Java 7进行编码,输出文件系统将是云(Azure,Aws)
答案 0 :(得分:0)
1)saveAsTextFile方法中没有直接支持来控制文件输出名称。 您可以尝试使用saveAsHadoopDataset来控制输出文件basename。
例如:您可以获得yourCustomName-00000而不是part-00000。
请记住,您无法使用此方法控制后缀00000。这是火花在写入时自动为每个分区分配的内容,以便每个分区写入一个唯一的文件。
为了控制上述评论,您必须编写自己的自定义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函数形成合并文件。