如何在 for 循环中迭代文本并在 MapReduce() 中查找特定文本的计数
How to iterate among text in the for loop and find count of a particular text in MapReduce()
所以这里有一段关于特定数据集的 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));
}
}
如果我理解正确的话,它的作用是,它有一个公共键(按列给出的一堆名称,如经理、管家),以及一堆整数(薪水)作为按列给出的值,其中的每一个迭代整数并添加到 0 以获得特定键的总薪水(将它们映射到相似键后)
我得到了另一个数据集,其中有一堆 'key' 列的城市名称和 text 格式的区域类型(不是像以前的数据集)示例(住宅或木材等)按列给出
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() 中实现的是,我想逐列迭代所有这些文本值,并扫描每个文本并检查它是否显示为 "Residential",如果是则增加伯爵。但是方法 get() 对于文本类型是未定义的。 (我想我可以很聪明,随便用这个数据集的文本替换 int)显然我对在这些文本列中迭代的知识非常少。有人会帮我解决这个问题吗?
尝试用这个替换你的 for 循环
for (Text val : values) {
if (val.toString().equals("Residential")){
count++;
}
}
由于您的值为文本,因此您需要使用等号来将其与 "Residential" 匹配。并且 .get() 未为文本定义。
希望这是你需要的
所以这里有一段关于特定数据集的 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));
}
}
如果我理解正确的话,它的作用是,它有一个公共键(按列给出的一堆名称,如经理、管家),以及一堆整数(薪水)作为按列给出的值,其中的每一个迭代整数并添加到 0 以获得特定键的总薪水(将它们映射到相似键后)
我得到了另一个数据集,其中有一堆 'key' 列的城市名称和 text 格式的区域类型(不是像以前的数据集)示例(住宅或木材等)按列给出
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() 中实现的是,我想逐列迭代所有这些文本值,并扫描每个文本并检查它是否显示为 "Residential",如果是则增加伯爵。但是方法 get() 对于文本类型是未定义的。 (我想我可以很聪明,随便用这个数据集的文本替换 int)显然我对在这些文本列中迭代的知识非常少。有人会帮我解决这个问题吗?
尝试用这个替换你的 for 循环
for (Text val : values) {
if (val.toString().equals("Residential")){
count++;
}
}
由于您的值为文本,因此您需要使用等号来将其与 "Residential" 匹配。并且 .get() 未为文本定义。
希望这是你需要的