2016-01-14 19 views
0

下面的MapReduce代碼寫入到輸出如下:列出所有從團結心滿意足航空公司的MapReduce程序

"Princeton Aviation Corporation"

"Priority Air Charter"

"Priority Air Transport" "Priority Aviation Company"

"Private Jet Expeditions" "Private Jet Management"

代碼:

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); 
    } 



} 

但輸出的代碼是給是:

"Princeton Aviation Corporation" 0

"Priority Air Charter" 0

"Priority Air Transport" 0

"Priority Aviation Company" 0

"Private Jet Expeditions" 0

"Private Jet Management" 0

請幫我找出我哪裏錯了!

輸入文件是:

1,"Privilege Style L",\N,"","PVG","PRIVILEGE","Spain","N"

2,"Princeton Aviation Corporation",\N,"","PCN","PRINCETON","United States","N"

3,"Priority Air Charter",\N,"","PRY","PRIORITY AIR","United States","N"

4,"Priority Air Transport",\N,"","PAT","PAT","United States","N"

5,"Priority Aviation Company",\N,"","BCK","BANKCHECK","United States","N"

6,"Privatair",\N,"","PTI","PRIVATAIR","Switzerland","Y"

7,"Private Jet Expeditions",\N,"","PJE","PEE JAY","United States","N"

8,"Private Jet Management",\N,"","PJA","PRIVATE FLIGHT","United States","N"

9,"Private Wings Flugcharter",\N,"8W","PWF","PRIVATE WINGS","Germany","N"

回答

-1

嘗試改變:

context.write(new Text(data[1]),new Text("")); 

這樣:

context.write(new Text(data[1])); 
+0

它向我顯示錯誤:類型TaskInputOutputContext 中的方法write(Text,Text)不適用於參數(Text) –

+0

這不起作用 - 'write'需要被賦予一個關鍵和一個價值。 –

1

您可以爲輸出值類設置NullWritable.class

job.setOutputValueClass(NullWritable.class); 

這會抑制減速器輸出的值部分,在輸出中爲0。

+0

它仍然給出相同的輸出,即使在做了您建議的更改之後 –

+0

您可以檢查您是否具有相同的代碼? 我將'Text.class'中給出的代碼作爲輸出值類運行,它沒有給出0,而是在每個名稱後面都有一個額外的空格。 「普林斯頓航空集團公司」 \t 「優先級空氣約章」 \t 「優先級航空運輸」 \t 「優先級航空企業」 \t 「私人飛機探險」 \t 隨着'NullWritable.class'作爲輸出值類,我得到乾淨的輸出 - 只是名稱。 「普林斯頓航空集團公司」 「優先級空氣約章」 「優先級航空運輸」 「優先級航空企業」 「私人飛機探險」 「私人飛機管理」 – PonMaran

+0

是它的工作!我用相同的代碼創建了新的java文件。可能是我的jar在執行時被替換的問題 –