2016-06-17 8 views
0

Spark StreamingでMapPartitionsToPairを実行しようとしていますが、空のイテレータでNoSuchElementException:nextというエラーが返されます。ここでNoSuchElementException:MapPartitionsToPair-Sparkの空のイテレータで次へ

は私のコードです:

JavaPairDStream<String,String> streamGiveKey= streamData1.mapPartitionsToPair(new PairFlatMapFunction<Iterator<String>, String, String>() { 
     @Override 
     public Iterable<Tuple2<String, String>> call(Iterator<String> stringIterator) throws Exception { 

      ArrayList<Tuple2<String,String>>arrayOfPartitionsWithKeys= new ArrayList<Tuple2<String, String>>(); 

      while (stringIterator.hasNext()){ 
       if(stringIterator.next()==null){ 
        return null; 
       } 

       JsonMessage retMap = new Gson().fromJson(stringIterator.next(),JsonMessage.class); 
       String key= retMap.getSid(); 
       Tuple2<String,String> keyValue= new Tuple2<String,String>(key,stringIterator.next()); 
       arrayOfPartitionsWithKeys.add(keyValue); 

      } 


return arrayOfPartitionsWithKeys; 
     } 
    }); 

誰もが、問題が何であるかを教えてもらえますか? ありがとうございます。

答えて

1

iterator.next()を呼び出すたびに、基本となるコレクション内で1つの要素を前方に移動します。この場合、私はあなたのループで一度使って、ローカルのvarにそれを割り当てて、その変数を再利用することをお勧めします。

+0

素晴らしい、魅力的なように働いた! :) どうもありがとうございました。 –

関連する問題