您的位置:首页 > 其它

多次读取reduce函数中迭代器的数据

2016-05-13 16:30 197 查看
spark,hadoop交流群,QQ群号:521066396,欢迎加入共同学习,一起进步~

第一次碰到读取reduce函数中迭代器的数据只能取一次的问题。为了优化,在reduce函数中,Iterable values只能被读取一次。查阅相关资料,如果要反复使用,需要克隆或者新生成对象。举个简单例子:

如果在reduce函数中读过values,

for (Text value : values) {
//do what you want
}


当reduce将数据填充到值迭代器的时候,应用了对象重用。这个特性对缓存机制有潜在影响。如果还想再使用values,那么需要克隆或保存新的对象。

List<Text> lists = new ArrayList<Text>();
Iterator<Text> iter = values.iterator();
while (iter.hasNext()) {
lists.add(iter.next());
}


下面是采用克隆的方式。

//创建一个集合,存放
ArrayList<Text> list = new ArrayList<Text>();
for (Text value : values) {
//克隆
Text text = WritableUtils.clone(value,context.getConfiguration());
list.add(text);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: