0

レデューサー側で何かをする前に Iterable のサイズを確認する必要がある MR ジョブを書いています。誰かがずっと前に同じ質問をしました (反復可能なオブジェクトのサイズを見つける方法は? ) が、与えられた解決策は機能していません.反復可能なオブジェクトには size() メソッドがないため、その方法を教えてください. 次のオプションを試しました。

  1. iterable から iterator オブジェクトを取得しようとしましたが、次の型キャスト エラーが発生しました。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 に答える 1

0
  1. Iterator iterator = Use values.iterator();イテレータを取得します。
  2. Listまたは他のデータ構造に値を格納し、それを反復処理します。
于 2013-07-15T10:39:26.133 に答える