我想将输出分隔符更改为;而不是制表符。我已经尝试过: Hadoop: key and value are tab separated in the output file. how to do it semicolon-separated? 但仍然是我的输出
key (tab) value
我正在使用Cloudera演示(CDH 4.1.3)。 这是我的代码:
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: Driver <in> <out>");
System.exit(2);
}
conf.set("mapreduce.textoutputformat.separator", ";");
Path in = new Path(otherArgs[0]);
Path out = new Path(otherArgs[1]);
Job job= new Job(getConf());
job.setJobName("MapReduce");
job.setMapperClass(Mapper.class);
job.setReducerClass(Reducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job, in);
FileOutputFormat.setOutputPath(job, out);
job.setJarByClass(Driver.class);
job.waitForCompletion(true) ? 0 : 1;
我想要
key;value
作为我的输出。
答案 0 :(得分:7)
该属性称为mapreduce.output.textoutputformat.separator
。
所以你基本上错过了那里的output
。
您可以在最新的主干源代码found in the Apache SVN.
中看到答案 1 :(得分:4)
您应该使用conf.set("mapred.textoutputformat.separator", ";");
代替conf.set("mapreduce.textoutputformat.separator", ";");
mapred
和mapreduce
完整代码:这是有效的。
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: Driver <in> <out>");
System.exit(2);
}
conf.set("mapred.textoutputformat.separator", ";");
Path in = new Path(otherArgs[0]);
Path out = new Path(otherArgs[1]);
Job job= new Job(getConf());
job.setJobName("MapReduce");
job.setMapperClass(Mapper.class);
job.setReducerClass(Reducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job, in);
FileOutputFormat.setOutputPath(job, out);
job.setJarByClass(Driver.class);
job.waitForCompletion(true) ? 0 : 1;
答案 2 :(得分:1)
2017年,它是getConf().set(TextOutputFormat.SEPERATOR, ";");
我相信使用原生常量可以提供更好的可维护性和更少的惊喜。
重要提示:此属性必须在 Job.getInstance(getConf())
/ new Job(getConf())
之前设置为,因为作业复制参数并且不关心进一步的配置修改。