重置可变对象

时间:2013-07-15 08:47:03

标签: mapreduce iterable

我正在写一个MR工作,在减速器方面,我需要在做任何事之前检查Iterable的大小。有人确实长时间问了同样的问题(How to find the size of an Iterable Object?)但是给出的解决方案没有用。由于Iterable没有size()方法,请告诉我如何做。 我尝试了以下选项。

  1. 尝试从iterable获取迭代器对象,但得到了以下类型转换 错误。与ResettableIterator相同的错误。 java.lang.ClassCastException: org.apache.hadoop.mapreduce.ReduceContext$ValueIterator cannot be cast to java.util.ListIterator

  2. 如果我迭代到Iterable对象的末尾来获取大小,那么 我怎样才能回到索引的开头。

  3. if(values instanceof Collection){ return ((Collection)values).size(); } 这不会受到影响,因为值的类型不同。

  4. 请帮我一些示例代码。这个问题确实耗费了大量时间。 非常感谢。!!

1 个答案:

答案 0 :(得分:0)

  1. Iterator iterator = Use values.iterator();获取迭代器。
  2. 将值存储在List或其他一些数据结构中,然后迭代它。