Java 如何在for循环中的文本之间迭代,并在MapReduce()中查找特定文本的计数
下面是一段特定数据集上的Reduce()代码,该数据集有一组指定为“key”的名称,以及将特定指定人员的工资指定为“value”Java 如何在for循环中的文本之间迭代,并在MapReduce()中查找特定文本的计数,java,hadoop,text,mapreduce,bigdata,Java,Hadoop,Text,Mapreduce,Bigdata,下面是一段特定数据集上的Reduce()代码,该数据集有一组指定为“key”的名称,以及将特定指定人员的工资指定为“value” public static class ReduceEmployee extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values,
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));
}
}
公共静态类ReduceEmployee扩展
减速器
{
public void reduce(文本键、Iterable值、,
上下文)抛出IOException、InterruptedException{
整数和=0;
for(可写入值:值){
sum+=val.get();
}
write(key,newintwriteable(sum));
}
}
如果我理解正确的话,它会有一个公共键(一组名称,如Manager,Steward,columnwise)和一组整数(palaries),作为columnwise给定的值,这些整数中的每一个都会被迭代并添加到0,以获得特定键的总薪资(将它们映射到类似的键后)
我得到了另一个数据集,其中有一组城市名称作为“关键”列,以及文本格式的区域类型(不像以前的数据集那样是整数),例如(住宅或木材等)列
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));
}
}
公共静态类ReduceEmployee扩展
减速器{
public void reduce(文本键、Iterable值、,
上下文)抛出IOException、InterruptedException{
整数计数=0;
文本r;
用于(文本值:值){
r=val.get();
if(r=“住宅”)
{
计数++;
}
}
write(key,newintwriteable(count));
}
}
我想在Reduce()中实现的是,我想在所有这些文本值之间逐列迭代,扫描每个文本并检查它是否读作“驻留”,如果是,则增加计数。但是类型text的get()方法未定义。(我认为我可以很聪明,随意地用文本替换这个数据集的int)显然,我在这些文本列中迭代的知识非常少。有人能帮我解决这个问题,给我一个解决办法吗 试着用这个替换for循环
for (Text val : values) {
if (val.toString().equals("Residential")){
count++;
}
}
由于您的值是文本,您需要使用等于来将其与“住宅”匹配。未为文本定义and.get()
希望这就是您所需要的尝试用此替换for循环
for (Text val : values) {
if (val.toString().equals("Residential")){
count++;
}
}
由于您的值是文本,您需要使用等于来将其与“住宅”匹配。未为文本定义and.get()
希望这就是您所需要的您是否试图计算每把钥匙的“住宅”发生率?您是否试图计算每把钥匙的“住宅”发生率?