这跟应用程序域有关系。
由于reduce被分分发到不同的机器
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
System.out.println("the key is "+key); //打印当前的key值
List<Text> l = new ArrayList<Text>(); //列表保存value值
for(Text k:values){
System.out.println(k.toString()); //打印出value中的值并保存,通过打印可知该key中有两个不同的value值
l.add(k);
}
下面跟reduce不在同一个域中。
System.out.println(l.get(0));
System.out.println(l.get(1));
所以会造成取不到数据。
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
System.out.println("the key is "+key); //打印当前的key值
List<Text> l = new ArrayList<Text>(); //列表保存value值
int i=0;
for(Text k:values){
System.out.println(k.toString()); //打印出value中的值并保存,通过打印可知该key中有两个不同的value值
l.add(k);
System.out.println(l.get(i));
i++;
}
如果放到reduce中,都在同一个域中了,所以能够取到。
|