【问题标题】:Mapreduce-java: calcutaing average for array listMapreduce-java:计算数组列表的平均值
【发布时间】:2016-04-10 19:18:40
【问题描述】:

我有 mapreduce 的任务,而且我是 mapreduce 编程的新手。 我想计算每年和特定城市的平均值、最小值和最大值。 所以这是我的示例输入

卡尔加里,AB,2009-01-07,604680,12694,2.5207754,0.065721168,0.025668362,0.972051954,0.037000279,0.022319018,,,0.00364112464,,0.00163, 卡尔加里,AB,2009-12-30,604620,12694,2.051769654,0.060114973,0.034026918,1.503277516,0.054219005,0.023258217,,,,,0.00354166,,,,0.003236141. 卡尔加里,AB,2010-01-06,604680,12266,4.015745522,0.097792741,0.032738892,0.368454554,0.019228992,0.032882053,,,0.004778065,4,5,0.00062065,4,5,0.00362034. 卡尔加里,AB,2010-01-13,604680,12551,3.006492921,0.09051656,0.041508534,0.215395047,0.012081755,0.023706119,,,0.004231772,,3,0.00308120>5p.

我知道如何查找城市和年份 我正在使用此代码:

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

现在我想在每一行中找到这两个数字(例如 2.5207754,0.065721168 ,不完全相同,而是第三个和第四个逗号后面的所有数字)并找到平均值、最小值和最大值。

在输出中应该是这样的:

卡尔加里 2009 年平均值:"",分钟; ““ , 最大限度: ”” 卡尔加里 2010 年平均值:"",分钟; "" , 最大值: ""

我试图使用此代码来查找每一行中的值,但由于每一行中的数据集都不相同,我得到了错误(在该部分中没有数据或大于此长度)

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];

那么你能帮我做这个项目吗?

【问题讨论】:

    标签: java eclipse hadoop arraylist mapreduce


    【解决方案1】:

    查看您的输入,您的记录似乎是用空格分隔的。您可以先使用“”进行拆分,然后获取各个值并使用它们进行计算

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

    城市:卡尔加里日期:2009-01-07 v1:2.5207754v2:0.065721168 城市:卡尔加里日期:2009-12-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

    【讨论】:

      猜你喜欢
      • 2012-06-03
      • 2023-03-24
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2014-05-14
      相关资源
      最近更新 更多