2012-03-24 10 views
0

私はHadoop MapReduceの初心者です。私はhttp://archive.cloudera.com/cdh/3/hadoop/mapred_tutorial.htmlでWordCountサンプルのバリエーションを試していました。私のソースファイルには追加の列があり、集計をどの列に行うかを指定できるようにしたい。Hadoop MapReduce設定オブジェクトを使用してカスタムパラメータを渡すにはどうすればよいですか?

run(...)メソッド(87行目から116行目)では、コマンドラインから渡された引数があります。区切り文字を持つ2つの追加の引数と、フィルタリングを実行する列の位置を持つ次の引数が2つあります)。私が設定します(サンプルの28行)の方法でこれらの値を取得しようとすると、

私は

if (args.length == 5) { 
     conf.set("ipPosition", args[4]); 
    } 
    if (args.length == 6) { 
     conf.set("delimiter", args[5]); 
    } 

としてこれらの値を設定しています。しかし、彼らはnullに戻ってきています。

public void configure(JobConf job) { 
     try { 
      String varIpPosition = job.get("ipPosition"); 
      if (varIpPosition != null) { 
       ipPosition = Integer.parseInt(varIpPosition); 
      } 
      String varDelimiter = job.get("delimiter"); 
      if (varDelimiter != null) { 
       if (varDelimiter == "comma") { 
        lineDelimiter = ","; 
       } else { 
        lineDelimiter = " "; 
       } 
      } 
      System.err.println("IP Position" + ipPosition); 
     } catch (Exception ex) { 
      System.err.println("Error Configuring Job :" 
        + job.get("ipPosition") + " - " 
        + StringUtils.stringifyException(ex)); 
     } 
    } 

アムは、私が間違って設定パラメータを設定する、または私は間違ってそれらを取得するのですか?どんな助けもありがとうございます。

+1

さて、それは私の悪いことでした。 If条件の両方が真であることをどのように期待しますか? if(args.length == 5){ conf.set( "ipPosition"、args [4]); } if(args.length == 6){ conf.set( "delimiter"、args [5]); } 金曜の夜のコーディングは明らかに悪い考えです。条件を修正した後、コードは正常に動作しています。 ご迷惑をおかけして申し訳ありません! – sumitkm

答えて

0

上記のコメントのとおりです。それは「コードエラー」でした。 APIに問題はありません。 if条件は

if (args.length >= 5) { 
    conf.set("ipPosition", args[4]); 
} 
if (args.length >= 6) { 
    conf.set("delimiter", args[5]); 
} 

ありがとうございます。

関連する問題