2016-04-10 21 views
0

私はmapreduceを持っており、mapreduceプログラミングでは非常に新しいです。 毎年、特定の都市について、平均値、最小値、最大値を計算します。 ので、ここで私のサンプル入力Mapreduce-java:配列リストの計算平均

カルガリー、AB、2009-01-07,604680,12694,2.5207754,0.065721168,0.025668362,0.972051954,0.037000279,0.022319018 ,,, 0.003641149 0.002936745 ,,, ,,, 0.016723641です カルガリー、AB、2009-12-30,604620,12694,2.051769654,0.060114973,0.034026918,1.503277516,0.054219005,0.0323258217 ,,, 0.003361414 ,,, 0.122375131 カルガリー、AB、2010-01-06,604680 、12266,4.015745522,0.097792741,0.032738892,0.368454554,0.019228992,0.028882053 ,,, 0.003190444 ,, 0.003190444 ,,, 0.064203865 カルガリー、AB、2010-01-13,604680,12551,3.006492921,0.09051656,0.041508534,0.215395047,0.215395047,0.012081755 、0.023706119 ,,, 0.004231772 ,,, 0.003083003 ,,, 0.155212503

私はこのコードを使用しています都市と年 を見つける方法を知っている:eg2.5207754,0.065721168、ないまったく同じ今私は(各行にこれら二つの数字を見つけたい

String line = value.toString(); 
    String[] tokens = line.split(","); 
    String[] date = tokens[2].split("-"); 
    String year = date[0]; 
    String location = tokens[0]; 

が、すべての3番目と4番目のコンマの後の数字)、平均値、最小値、最大値を求めます。 ; ""、最小:

カルガリー2009年平均:

と出力には次のようになります必要があります""、最大: "" カルガリー2010平均: ""、分; ""、max: ""

このコードを使用して各行の値を検索しようとしましたが、データセットが各行で同じではないため、エラーが発生しましたこの長さ)

float number = 0; 
    float number2 = 0 ; 
    char a; 
    char c; 
    a = line.charAt(34); 
    c = line.charAt(44); 
    if (a == ',') 
    { 
     number = Float.parseFloat(line.substring(35, 44)); 
    } 
    else 
    { 
     number = Float.parseFloat(line.substring(35, 46)); 
    } 

    if (c == ',') 
    { 
     number2 = Float.parseFloat(line.substring(45, 56)); 

    } else 
    { 
     number = Float.parseFloat(line.substring(47, 58)); 
    } 

    Text numbers = new Text(number + " " + number2 + " "); 
その後

私はこのコードを使用しようとしていたと同じことが、それは動作しません上記のようにデータがないか、もっと大きなこと:

String number = tokens[4]; 
String number2 = tokens[5]; 

はそうあなたは私がこのプロジェクトを行うのを助けることができます?

答えて

0

あなたの入力を見ると、レコードはスペースで区切られているようです。カルガリー日:2009-01-07 V1:2.5207754v2:0.065721168 市:カルガリー日:2009-12あなたはまず、「使用」して、個々の値を取得し、計算

 String[] arr = line.split(" "); 
     for(String val : arr){ 
      String[] dataArr = val.split(","); 
      String city = dataArr[0]; 
      String date = dataArr[2]; 
      String v1 = dataArr[5]; 
      String v2 = dataArr[6]; 
      System.out.println("city: "+city +" date: "+ date +" v1: "+ v1+"v2: "+ v2); 
     } 

都市のためにそれらを使用して分割することができます-30 v1:2.051769654v2:0.060114973 都市:カルガリー日付:2010-01-06 v1:4.015745522v2:0.097792741 都市:カルガリー日付:2010-01-13 v1:3.006492921v2:0.09051656 都市:カルガリー日付:2009- 01-07 v1:2.5207754v2:0.065721168