Spark输出文件名并附加写入

duc*_*uck 5 java hadoop azure apache-spark

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

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

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

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

小智 0

1)saveAsTextFile方法不直接支持控制文件输出名称。您可以尝试使用 saveAsHadoopDataset 来控制输出文件基本名称。

例如:您可以获取 yourCustomName-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);
Run Code Online (Sandbox Code Playgroud)

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