2013-07-15 50 views
0

我正在写一个MR作业,在reducer方面,我需要在做任何事之前检查Iterable的大小。有人问过相同的问题(How to find the size of an Iterable Object?),但提供的解决方案无法正常工作。由于Iterable没有size()方法,因此请告诉我该怎么做。 我尝试了以下选项。重置Iterable对象

  1. 试图从迭代得到一个迭代器对象,但有以下类型转换 错误。与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(); } 由于这些值的类型不同,因此不会发生命中。

请帮我一些示例代码。这个问题确实花了很多时间。 非常感谢。

回答

0
  1. Iterator iterator = Use values.iterator();得到迭代器。
  2. 将值存储在List或某些其他数据结构中,然后遍历它。