我知道这个问题以前有人问过,但我无法得到一个明确的工作答案。
result.saveAsTextFile(path);
使用spark saveastextfile时,输出以“part-00”、“part-01”等名称保存。是否可以将此名称更改为自定义名称?saveastextfile是否可以附加到现有文件,而不是覆盖它?我使用Java7进行编码,输出文件系统将是cloud(azure,aws)
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函数形成合并文件。
1条答案
按热度按时间r8xiu3jd1#
1) saveastextfile方法不直接支持控制文件输出名称。您可以尝试使用saveashadoopdataset来控制输出文件basename。
e、 g:您可以获得CustomName-00000,而不是part-00000。
请记住,不能使用此方法控制后缀00000。它是spark在写入时自动为每个分区分配的,以便每个分区写入一个唯一的文件。
为了像上面在注解中提到的那样控制这种情况,您必须编写自己的自定义outputformat。
2) 解决方法是将输出原样写入输出位置,并使用hadoop fileutil.copymerge函数形成合并文件。