所以这里有一段reduce()代码在一个特定的数据集上,这个数据集有一堆指定为“key”和指定为“value”的特定人员的薪水
public static class ReduceEmployee extends
Reducer<Text, IntWritable, Text, IntWritable>
{
public void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
如果我理解正确的话,它会有一个公共键(一组名称,如manager,steward given columnwise)和一组整数(palaries)作为columnwise的值,这些整数中的每一个都会被迭代并添加到0中,以得到特定键的总工资(在将它们Map到类似键之后)
我得到了另一个数据集,其中有一个城市的名称作为'关键'列和文本格式的地区类型(不是整数工资像以前的数据集)的例子(住宅或木材等)给出了列
public static class ReduceEmployee extends
Reducer<Text, Text, Text, IntWritable> {
public void reduce(Text key, Iterable<Text> values,
Context context) throws IOException, InterruptedException {
int count = 0;
Text r;
for (Text val : values) {
r = val.get();
if (r=="Residential")
{
count++;
}
}
context.write(key, new IntWritable(count));
}
}
我想在reduce()中实现的是,我想逐列迭代所有这些文本值,扫描每个文本并检查它是否读作“驻留”,如果是,则增加计数。但是类型text的get()方法未定义(我认为我可以很聪明,随意地用文本替换int)显然,我对在这些文本列中进行迭代的知识非常少。有人能帮我解决这个问题吗?
1条答案
按热度按时间ckx4rj1h1#
尝试用这个替换for循环
因为您的值是文本,所以需要使用equals将其与“住宅”匹配。文本未定义and.get()。
希望这是你需要的