Java 非法状态异常mongo hadoop和spark

Java 非法状态异常mongo hadoop和spark,java,mongodb,exception,apache-spark,Java,Mongodb,Exception,Apache Spark,我在org.bson.basicBondeCoder中得到了“java.lang.IllegalStateException:not ready”。在尝试使用MongoDB作为输入RDD时进行解码: 就像: 任务完全完成,结果似乎正确,但每次运行时我都会得到以下结果 java.lang.IllegalStateException: not ready at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:139) a

我在org.bson.basicBondeCoder中得到了“java.lang.IllegalStateException:not ready”。在尝试使用MongoDB作为输入RDD时进行解码:

就像:

任务完全完成,结果似乎正确,但每次运行时我都会得到以下结果

java.lang.IllegalStateException: not ready
    at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:139)
    at org.bson.BasicBSONDecoder.decode(BasicBSONDecoder.java:123)
    at com.mongodb.hadoop.input.MongoInputSplit.readFields(MongoInputSplit.java:185)
    at org.apache.hadoop.io.ObjectWritable.readObject(ObjectWritable.java:285)
    at org.apache.hadoop.io.ObjectWritable.readFields(ObjectWritable.java:77)
    at org.apache.spark.SerializableWritable.readObject(SerializableWritable.scala:42)
    at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at org.apache.spark.scheduler.ShuffleMapTask.readExternal(ShuffleMapTask.scala:140)
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1837)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:63)
    at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:85)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:165)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

我会喜欢任何输入。每个spark函数块中都有try-catch和默认返回值,因此我确信我不会导致任何异常向上传播

我能想到的唯一的地方就是

file_save.saveAsNewAPIHadoopFile("file:///bogus", Object.class, Object.class, MongoOutputFormat.class, config);

JavaPairRDD<Object, BSONObject> mongoRDD = sc.newAPIHadoopRDD(config, com.mongodb.hadoop.MongoInputFormat.class, Object.class, BSONObject.class);
javapairdd mongoRDD=sc.newAPIHadoopRDD(配置,com.mongodb.hadoop.MongoInputFormat.class,Object.class,BSONObject.class);

我很乐意提供更多信息。

您找到解决方案了吗?我也面临同样的问题。当我尝试使用(例如计数)特定RDD时,会发生这种情况。
JavaPairRDD<Object, BSONObject> mongoRDD = sc.newAPIHadoopRDD(config, com.mongodb.hadoop.MongoInputFormat.class, Object.class, BSONObject.class);