java—如何在for循环中的文本之间迭代,并在mapreduce()中查找特定文本的计数

5tmbdcev  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(256)

所以这里有一段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)显然,我对在这些文本列中进行迭代的知识非常少。有人能帮我解决这个问题吗?

ckx4rj1h

ckx4rj1h1#

尝试用这个替换for循环

for (Text val : values) {
   if (val.toString().equals("Residential")){
        count++;
   }
}

因为您的值是文本,所以需要使用equals将其与“住宅”匹配。文本未定义and.get()。
希望这是你需要的

相关问题