gpt4 book ai didi

java - hadoop在reducer中获取最大值

转载 作者:行者123 更新时间:2023-12-02 21:38:59 27 4
gpt4 key购买 nike

我是hadoop的新手。我有数据:NAICS、面积和工资来自:https://data.ny.gov/Economic-Development/Quarterly-Census-of-Employment-and-Wages-Annual-Da/shc7-xcbw .

我的目标是在每个 NAICS 中找到使用 java hadoop 的统计数据中工资总和最大的区域。到目前为止,我制作了 Mapper,它将创建这种形式的上下文: ,所以关键是用“_”和 Reducer 连接的 NAICS 和区域:

public static class IntSumReducer extends Reducer<Text,LongWritable,Text,LongWritable> {
private LongWritable result = new LongWritable();
//private HashMap<String, Long> naicsMax = new HashMap<String, Long>();

public void reduce(Text key, Iterable<LongWritable> values, Context context ) throws IOException, InterruptedException {
long sum = 0;
for (LongWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}

到目前为止,这将产生诸如 之类的结果,所以我在每个 NAICS 总工资中都有每个区域,但现在我不知道如何继续我的目标。我需要在每个 NAICS 中获得最大的区域工资总和,但我不知道如何。我是否在我的计划映射器中犯了任何错误,或者像 这样的上下文是正确的?

非常感谢你的回答

最佳答案

您可以将此 reducer 的输出提供给另一个 map reduce 作业。
该作业的映射器可以具有以下逻辑,

  • 拆分键中的 NAICS 和区域,只给出 NAICS
    输出关键部分。
  • 用逗号作为分隔符附加带有工资总和的区域并给出
    在输出值部分。

  • Reducer 可能具有查找每个 NAICS_Area 的工资总和的最大值的逻辑。
  • 迭代键 (NAICS) 并为每次迭代拆分值。
  • 获取总和值并将其转换为long,然后实现最大值
    逻辑。

  • ,
    public void reduce(Text NAICS, Iterable<Text> values, Context context)       throws IOException, InterruptedException 
    {
    long max =0;
    for (Text value : values)
    {
    String[] areaWages = value.toString().Split(',');
    String sumString = areaWages[0];
    long sum = Long.parseLong(sumString);
    String AREA = areaWages[1];
    if(sum > max)
    {
    max = sum;
    }
    }
    context.write(NAICS, new TextAREA))
    }

    关于java - hadoop在reducer中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108622/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com