编写以下mapreduce代码以获得以下输出:
“普林斯顿航空公司”“优先航空宪章”
“优先航空运输”“优先航空公司”
“私人飞机探险”“私人飞机管理”
代码:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class UScountry {
public static class mymapper extends Mapper<Object,Text,Text,Text>{
protected void map(Object key,Text value,Context context) throws IOException, InterruptedException{
String data[]=value.toString().split(",");
CharSequence c="united states";
if(data[6].toLowerCase().contains(c)){
context.write(new Text(data[1]),new Text("") );
}
}
}
public static void main(String args[]) throws IOException, ClassNotFoundException, InterruptedException
{
Configuration conf=new Configuration();
Job job=Job.getInstance(conf,"US");
job.setJarByClass(UScountry.class);
job.setMapperClass(mymapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
但输出的代码是:
“普林斯顿航空公司”0
“优先航空宪章”0
“优先航空运输”0
“Priority Aviation Company”0
“私人飞机探险”0
“私人飞机管理”0
请帮我找出我哪里出错!
输入文件是:
1,“特权格式L”,\ N,“”,“PVG”,“PRIVILEGE”,“西班牙”,“N”
2,“普林斯顿航空公司”,“N”,“”,“PCN”,“PRINCETON”,“美联航 状态”, “N”
3,“优先航空宪章”,\ N,“”,“PRY”,“优先航空”,“联合航空” 状态”, “N”4,“优先航空运输”,\ N,“”,“PAT”,“PAT”,“美国”,“N”
5,“优先航空公司”,“N”,“”,“BCK”,“BANKCHECK”,“联合航空公司” 状态”, “N”
6, “瑞士私人航空”,\ N, “”, “PTI”, “瑞士私人航空”, “瑞士”, “Y”
7,“私人飞机探险队”,“N”,“”,“PJE”,“PEE JAY”,“美国”,“N”8,“私人飞机管理”,\ N,“”,“PJA”,“私人飞行”,“美联航 状态”, “N”
9,“Private Wings Flugcharter”,\ N,“8W”,“PWF”,“PRIVATE 翼”, “德国”, “N”
答案 0 :(得分:1)
您可以为输出值类设置NullWritable.class
。
job.setOutputValueClass(NullWritable.class);
这将抑制reducer输出的值部分,即输出中的0。
答案 1 :(得分:-1)
尝试更改:
context.write(new Text(data[1]),new Text("") );
到此:
context.write(new Text(data[1]));