NoSuchElementException:接下来是MapPartitionsToPair-Spark中的空迭代器

时间:2016-06-17 15:49:26

标签: java apache-spark spark-streaming

我试图在Spark Streaming中执行MapPartitionsToPair,但它总是返回错误:NoSuchElementException:next on empty iterator。

这是我的代码:

 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 个答案:

答案 0 :(得分:1)

每次调用iterator.next()时,都会在底层集合中向前移动一个元素。在这种情况下,我建议在循环中使用next一次并将其分配给本地var并重用该var ...