gpt4 book ai didi

java - 如何在hadoop mapreduce中选择组合键中的值

转载 作者:行者123 更新时间:2023-12-02 20:47:35 25 4
gpt4 key购买 nike

我有以下具有5列和若干行的csv文件。但是我只显示前6行。

Date,Food,Vitamin,Protein,NumStudents
01/01/17, Pasta, A, Yes, 560
01/01/17, Pizza, A, Yes, 730
01/01/17, Burrito, C, Yes, 240
02/01/17, Pizza, A, Yes, 340
02/01/17, Pasta, B, Yes, 450
02/01/17, Beef, B, Yes, 450

现在,我想查找某天只有比萨饼和面食的NumStudents的总和。

本质上,对于 01/01/17,我只需要对NumStudents的比萨饼和面食求和,而不必对卷饼进行求和。

预期产量
01/01/17 1290
02/01/17 790

我得到的输出
01/01/17 1530
02/01/17 1240

在我的代码中,我能够对所有3种食物总计NumStudents,但不知道如何从mapper的复合键中选择性地排除某种食物。知道我应该怎么做吗?

最佳答案

您可以只在映射器中过滤您感兴趣的类型。这可能看起来像:

public class InputMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

private Text oKey = new Text();
private IntWritable oValue = new IntWritable();

@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {

String parts[] = value.toString().split(",");
if (parts[1].equals("Pasta") || parts[1].equals("Pizza")) {
oKey.set(parts[0]);
oValue.set(Integer.parseInt(parts[4]));
context.write(oKey, oValue);
}
}
}

因此,在reduce中,您只需要对值求和即可得出总数,而关键是日期。

关于java - 如何在hadoop mapreduce中选择组合键中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47294377/

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