Hadoop map reduce java 公共静态类TokenizerMapper扩展映射器{ 公共void映射(对象键、文本值、上下文上下文)引发IOException、InterruptedException{ StringTokenizer itr=新的StringTokenizer(value.toString(),“*$&/\t\n\f\”,.:;?![](){}-\); 而(itr.hasMoreTokens()){ 字符串项=itr.nextToken().toLowerCase(); 列表映射=新的ArrayList(); /*我在这里做一些手术*/ 用于(第i对:地图){ 字符串w1=i.getKey(); 文本字=新文本(w1); Pair newValue=i.getValue(); String merge=String.valueOf(newValue.getKey())+“”+String.valueOf(newValue.getValue()); Text val=新文本(合并); /*将两个参数作为文本发送到我的上下文中*/ 上下文。写(单词,val); } } } } 公共静态类Reducer 1扩展了Reducer{ 公共void reduce(文本键、文本值、上下文上下文)引发IOException、InterruptedException{ /*在这里,我想提取值,我尝试使用for循环,但它的说法是不能迭代,它期望的是iterable*/ 对于(文本t:值) { /*这不起作用。我知道我们可以用Iterable表示整数,但在我的例子中,它是文本。 } //编写(键、值); } }
请参阅注释行,以便更好地理解我的问题。Hadoop map reduce java 公共静态类TokenizerMapper扩展映射器{ 公共void映射(对象键、文本值、上下文上下文)引发IOException、InterruptedException{ StringTokenizer itr=新的StringTokenizer(value.toString(),“*$&/\t\n\f\”,.:;?![](){}-\); 而(itr.hasMoreTokens()){ 字符串项=itr.nextToken().toLowerCase(); 列表映射=新的ArrayList(); /*我在这里做一些手术*/ 用于(第i对:地图){ 字符串w1=i.getKey(); 文本字=新文本(w1); Pair newValue=i.getValue(); String merge=String.valueOf(newValue.getKey())+“”+String.valueOf(newValue.getValue()); Text val=新文本(合并); /*将两个参数作为文本发送到我的上下文中*/ 上下文。写(单词,val); } } } } 公共静态类Reducer 1扩展了Reducer{ 公共void reduce(文本键、文本值、上下文上下文)引发IOException、InterruptedException{ /*在这里,我想提取值,我尝试使用for循环,但它的说法是不能迭代,它期望的是iterable*/ 对于(文本t:值) { /*这不起作用。我知道我们可以用Iterable表示整数,但在我的例子中,它是文本。 } //编写(键、值); } },java,hadoop,mapreduce,Java,Hadoop,Mapreduce,请参阅注释行,以便更好地理解我的问题。 是否有任何方法可以提取缩减器中的文本值因为循环希望在您的缩减器中有iterable,您将得到一个iterable,必须循环并在空间上拆分,以便为映射程序编写的每个merge字符串重新创建字符串值 注意:如果映射中的newValue.getKey()本身包含字符串,则在空格上拆分将不是非常可靠的reduce(…)方法的正确签名。请查看一些字数教程。请展示这些“一些操作”“你正在这样做,否则内部循环什么也做不了。有关更多信息,请参阅(这意味着还将显示您的预期输
是否有任何方法可以提取缩减器中的文本值
因为
循环希望在您的缩减器中有iterable
,您将得到一个iterable
,必须循环并在空间上拆分,以便为映射程序编写的每个merge
字符串重新创建字符串值
注意:如果映射中的newValue.getKey()
本身包含字符串,则在空格上拆分将不是非常可靠的reduce(…)
方法的正确签名。请查看一些字数教程。请展示这些“一些操作”“你正在这样做,否则内部循环什么也做不了。有关更多信息,请参阅(这意味着还将显示您的预期输入和输出)
public static class TokenizerMapper extends Mapper<Object, Text, Text, Text> {
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString(), " *$&#/\t\n\f\"'\\,.:;?![](){}<>~-_");
while (itr.hasMoreTokens()) {
String term = itr.nextToken().toLowerCase();
List<Pair<String, Pair<Integer, Integer>>> map = new ArrayList<Pair<String, Pair<Integer, Integer>>>();
/*here i am performing some operations*/
for (Pair<String, Pair<Integer, Integer>> i : map){
String w1 = i.getKey();
Text word = new Text(w1);
Pair<Integer, Integer> newValue = i.getValue();
String merge = String.valueOf(newValue.getKey()) + " " + String.valueOf(newValue.getValue());
Text val = new Text(merge);
/*sending both the arguments as text into my context.*/
context.write(word, val);
}
}
}
}
public static class Reducer1 extends Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Text values, Context context) throws IOException, InterruptedException {
/* here i want to extract the values, i tried using for loop but its saying cannot iterate, its expecting something iterable.*/
for (Text t : values)
{
/*this is not working. I know we can use Iterable<IntWritable> for integers but in my case it is text.
}
//context.write(key, values);
}
}