Spark输出文件名并附加写入

时间:2016-08-11 05:24:43

标签: java azure hadoop apache-spark

我知道之前已经问过这个问题,但我无法得到明确的工作答案。

result.saveAsTextFile(path);
  1. 使用spark saveAsTextFile时,输出的名称为" part-00"," part-01"等等 是否可以将此名称更改为自定义名称?

  2. saveAsTextFile是否可以附加到现有文件而不是覆盖它?

  3. 我使用Java 7进行编码,输出文件系统将是云(Azure,Aws)

1 个答案:

答案 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函数形成合并文件。